• 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

0 głosów
630 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 489 wizyt
pytanie zadane 29 listopada 2016 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
2 odpowiedzi 322 wizyt
pytanie zadane 11 listopada 2015 w C i C++ przez Memories Obywatel (1,410 p.)
0 głosów
1 odpowiedź 1,963 wizyt

93,424 zapytań

142,421 odpowiedzi

322,643 komentarzy

62,782 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...