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

Błąd w autorkiej funkcji zmianie liter na male / duze

Object Storage Arubacloud
0 głosów
331 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
edycja 10 marca 2018 przez Eryk Andrzejewski

Hej, 

Stworzyłem funckje do zmiany liter na małe / duże. Moim zdaniem powinna działać, kompilator jednak twierdzi inaczej.

//type can be 'l' || 'L' - to large OR 's' || 'S' - to small
char changeSizeLetter(char letter, char type)
{
	if (type == 'l' || type == 'L')
	{
		if (letter >= 'a' && letter <= 'z')
			letter -= 32;
	}
	else if (type == 's' || type == 'S')
	{
		if (letter >= 'A' && letter <= 'Z')
			letter += 32;
	}
	return letter;
}

//type can be 'l' || 'L' - to large OR 's' || 'S' - to small
string changeSizeLetterOnWord(string word, char type)
{
	for (char value : word)
		value = changeSizeLetter(value, type);

	return word;
}

///Uzycie

		tempVariable = changeSizeLetterOnWord(tempVariable, 's');

Co poszło nie tak?

 

Z góry dziękuje za pomoc!

komentarz 10 marca 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Poprawiłem formatowanie kodu, bo kod, który podpiąłeś pod ify był schowany. Staraj się nie pisać w ten sposób (ify w jednej linijce), używaj nowych linii i wcięć. A najlepiej to nawet pojedyncze instrukcje zagnieżdżać w klamrach.
komentarz 10 marca 2018 przez Shiro Stary wyjadacz (10,300 p.)
Dziękuje za formatowanie, nie zauważyłem tego. Co do klamer to używam ich prawie zawsze, ale tutaj wydawało mi się że bez klamer ładniej to wygląda tzn. czytelniej. Tzn tak było VSie.

Dziękuje!

2 odpowiedzi

+1 głos
odpowiedź 10 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)
string changeSizeLetterOnWord(string word, char type)
{
    for (char value : word)
        value = changeSizeLetter(value, type);
 
    return word;
}

W pętli for jedynie kopiujesz znaki stringa word, więc cała twoja praca idzie na marne. Zastosuj referencję, czyli

for (char& value : word)
komentarz 10 marca 2018 przez Shiro Stary wyjadacz (10,300 p.)
Wybacz, ale niestety nie rozumiem. Dlaczego jedynie kopiuje ? Każdą literkę osobno przepuszczam przez funkcję.

Nie twierdzę, że nie masz racji, wręcz przeciwnie. Jedynie nie rozumiem za co przepraszam.
komentarz 10 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)
Zmienna char w pętli jedynie otrzymuje wartości kolejnych znaków stringa. Nie ma tu żadnego powiązania, normalne przypisanie. Aby to powiązanie istniało, należy użyć referencji.
komentarz 10 marca 2018 przez Shiro Stary wyjadacz (10,300 p.)

Już rozumiem, jednak przy zmianie kodu na: 


string changeSizeLetterOnWord(string word, char type)
{
for (unsigned int i = 0; i < word.length(); i++)
word[i] = changeSizeLetter(word[i], type);

return word;
}

///Albo na:

//type can be 'l' || 'L' - to large OR 's' || 'S' - to small
string changeSizeLetterOnWord(string word, char type)
{
	for (char& value : word)
		value = changeSizeLetter(value, type);

	return word;
}

Niestety, ale nie ma zmany w działaniu ;/

komentarz 10 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)

Mi wszystko działa. Zobacz to.

0 głosów
odpowiedź 10 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Jaki dostajesz komunikat? Nie wystarczy po prostu przeiterować się po całym stringu i każdy char zamienić funkcją toupper?

Podobne pytania

0 głosów
2 odpowiedzi 168 wizyt
pytanie zadane 29 listopada 2016 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 11 listopada 2015 w C i C++ przez Memories Obywatel (1,410 p.)
0 głosów
1 odpowiedź 1,676 wizyt

92,568 zapytań

141,422 odpowiedzi

319,640 komentarzy

61,957 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...