• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana wprowadzonych liter, z małych na wielkie

VPS Starter Arubacloud
0 głosów
3,126 wizyt
pytanie zadane 18 października 2017 w C i C++ przez dominiv2604 Początkujący (350 p.)

Witam,

mam pewne zadanie, które polega na zamianie wprowadzonych z klawiatury małych liter na wielkie. Koncepcję miałem taką, że jeżeli litera ma kod większy niż 97 w kodzie ASCII, biorę ją pod uwagę że jest literą małą. Żeby dokonać konwersji na wielką, postanowiłem odjąć od niej wartość 32 (97 - 32 = 65 = Duża litera A). Lecz po wprowadzeniu litery, program zawiesza się. Proszę bardzo o jakieś wskazówki, gdzie robię błąd. A może ktoś ma lepszą koncepcję na to zadanie?

 

#include <stdio.h>
#include <stdlib.h>


int main(void) {

int litera1;

scanf("%s", &litera1);
if(litera1>=97)
{
	litera1 = litera1-32;
} 
printf("\n\nLiterka: %s", litera1);
}

 

Pozdrawiam :)

4 odpowiedzi

0 głosów
odpowiedź 18 października 2017 przez Bondrusiek Maniak (61,370 p.)

Cześć,

spróbuj zamienić %s na %c. %s jest dla łańcuchów a %c dla znaków. Możesz też w scanf zmienić %s na %d(to jest dla wartości całkowitych).

#include <stdio.h>
#include <stdlib.h>
 
 
int main(void) {
 
int litera1;
 
scanf("%d", &litera1);
if(litera1>=97)
{
    litera1 = litera1-32;
} 
printf("\n\nLiterka: %c", litera1);
}

Tu masz funkcje do zamiany wielkości

http://cpp0x.pl/dokumentacja/standard-C/toupper/261

komentarz 19 października 2017 przez dominiv2604 Początkujący (350 p.)
Niestety nie działa. po wprowadzeniu litery zamieniana jest ona na "(null)". Jeszcze jakiś pomysł, oprócz używania gotowych funkcji?
komentarz 19 października 2017 przez Bondrusiek Maniak (61,370 p.)

Zauważ że wpisujesz do scanf nie stringa lecz liczbę całkowitą(integer)

Zamień int na char i wtedy jak wpiszesz małą literę np 'c' to zamieni Ci na 'C'.

#include <stdio.h>
#include <stdlib.h>


int main(void) {

char litera1;

scanf("%c", &litera1);
if(litera1>=97)
{
    litera1 = litera1-32;
}
printf("\n\nLiterka: %c", litera1);
}

 

0 głosów
odpowiedź 19 października 2017 przez mokrowski Mędrzec (155,460 p.)

Proponuję napisać własną funkcję:

bool czy_litera(char c) {
   // ... 
}

Sprawdzisz w niej zakres kodu znaku. Wystarczy zwykłe:

c >= 'a' && c <= 'z'

Następnie napisz funkcję:

char zrob_wielka_litere(char c) {
    // ... 
}

W której sprawdzisz (używając pierwszej funkcji) czy to jest znak litery i zamienisz go na wielką. W przypadku jeśli znak nie jest literą, zwrócisz go po prostu bez zmian :-) 

0 głosów
odpowiedź 21 października 2017 przez dominiv2604 Początkujący (350 p.)
Zmienną zmieniłem na typ "char" i działa :)
–1 głos
odpowiedź 18 października 2017 przez xKaktus Początkujący (340 p.)

 toupper, jednak nie działa na polskie znaki http://www.cplusplus.com/reference/cctype/toupper/

komentarz 18 października 2017 przez dominiv2604 Początkujący (350 p.)
Nie potrzebuję, aby działało na polskich znakach. Dla mnie ważne jest aby wykonać to bez dodatkowych bibliotek.
komentarz 18 października 2017 przez Sheida Użytkownik (950 p.)
Musisz przekonwertowac litere na liczbe typu int np ascii_char(int);
komentarz 19 października 2017 przez j23 Mędrzec (194,920 p.)
edycja 19 października 2017 przez j23

toupper() działa na polskich znakach, tylko musisz ustawić locale z odpowiednim kodowaniem (w windowsie na ogół jest to 1250). Dodatkowo trzeba pamiętać to, o czym wspomniał Sheida - kody znaków char trzeba rzutować na unsigned char przed podaniem ich w argumencie funkcji (bo ten jest typu int).

Podobne pytania

0 głosów
2 odpowiedzi 1,155 wizyt
0 głosów
1 odpowiedź 2,288 wizyt
pytanie zadane 27 kwietnia 2015 w C i C++ przez andrzejugdziejestes Początkujący (390 p.)
0 głosów
1 odpowiedź 1,660 wizyt

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...