zamiana znakow

0

witam. jakiej funkcji powinienem użyć aby zmienić w wyrazie powtarzające się litery na inne? domyślam się ze chodzi o string ale nie wiem jak zadeklarować całość

0

nie wiem czy dobrze wytłumaczyłem. chodzi o to aby np. w wyrazie OSOBA zamienic litery tak aby z wyrazu OSOBA powstał wyraz OSPBA. chodzi o to aby druga powtarzająca się litera była przesuwana w alfabecie o 1 do przodu

1

Tablice
For
Char
I ew. to też możesz sobie obejrzeć Rzutowanie żeby łatwo dodawać 1 do znaku i automatycznie uzyskać literę o 1 większą. Uważaj na literę 'z', 'Z' oraz znaki interpunkcje i inne.

1

Jeżeli mowa o C++ to możemy skorzystać z kilku rzeczy, które ułatwią nam zadanie.

Musimy w jakiś sposób oznaczyć elementy, które wystąpiły przynajmniej raz - i do tego świetnie nadaje nam się struktura set (bądź od C++11, unordered_set). Z nią nasz algorytm będzie bardzo prosty. Dla każdego znaku (jeżeli chcemy jedynie zmodyfikować w miejscu nasz string to możemy użyć "nowego" fora, biorąc referencję do znaku) próbujemy umieścić go w secie za pomocą metody insert. Wynikiem będzie std::pair<..., bool>, gdzie ten bool oznacza czy element udało się dodać. Jeżeli nie, czyli element jest już w kolekcji - czyli wystąpił już wcześniej - to modyfikujemy nasz znak.

0

mogę prosić o cala linijke tego kodu ? dopiero zaczynam prace z c++ i ciężko mi jeszcze zrozumieć jezyk programistyczny

1

i tak tego nie zajarzysz więc proszę

#include <iostream>
#include <string>
#include <set>

int main()
{
	std::string s = "SST";
	std::set<char> uniques;
	for(auto it = std::begin(s), itend = std::end(s) ; it != itend ; ++it) {
		auto& ch = *it;
		if(uniques.find(ch) != std::end(uniques)) {
			if(ch == 'Z') {
				ch = 'A';
			} else if(ch == 'z') {
				ch = 'a';
			} else {
				++ch;
			}
		} else {
			uniques.insert(ch);
		}
	}

	std::cout << s;

	return 0;
}
0

w linijce for..... wyrzuca mi błąd. pracuje na c++ 4.9.9.2

0
cezarx napisał(a):

w linijce for..... wyrzuca mi błąd. pracuje na c++ 4.9.9.2

Wyrzuć ten syf i zainstaluj coś porządnego, najlepiej to http://www.microsoft.com/en-us/download/details.aspx?id=40787

6

@gośćabc: można to trochę uprościć :).

unordered_set<char> chars;

for (char &c : word) {
	if (!chars.insert(c).second) {
		// zmodyfikuj c
	}
}
0

w nowszej wersji C++ tez wyrzuca błąd

1

Dodaj do kompilatora opcję -std=c++11

0

gdzie to zrobić??

0
cezarx napisał(a):

gdzie to zrobić??

W wierszu polecenia odpalenia kompilatora lub w opcjach IDE.

Zastanów się nad prostszym rozwiązaniem:

char tb[]="OSOBA";
++(*strchr(tb+1,tb[0]));
cout<<tb<<endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1