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

Porównanie znaków w łańcuchu string C++

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
4,121 wizyt
pytanie zadane 11 grudnia 2018 w C i C++ przez Draq Nowicjusz (160 p.)

Witam, piszę sobie program do upodabniania słów. Na wejściu dostajemy długość wyrazów, wyraz1 i wyraz2. Po przejściu przez algorytm wyraz2 ma się równać wyraz1, czyli program dostaje:

2

asd

das

wyjście:  asd

Niestety operator "==" nie działa w przypadku typu string a przekonwertować na char się nie da z tego co wiem. Czy mogę prosić o podpowiedź?

 


string word_assimilation(string tab1, string tab2, int w_longitude)
{
string *replacement = new string[w_longitude];
	while (tab2!=tab1)
	{
		for (int i = 0; i < w_longitude; i++)
		{
			if (tab2[i] != tab1[i])
			{
				replacement[i] = tab2[i];
				tab2[i] = '\0';
			}
		}

		for (int i = 0; i < w_longitude; i++)
		{
/*->tu mam problem*/ if (replacement[i] == tab1[i]) 
			{
				tab2[i] = replacement[i];
			}
		}
	}
	return tab2;
}

 

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
Przy okazji, nie rozumiem dlaczego działa operator != w przypadku string ale == już nie..

2 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
Nie rozumiem do konca co robisz. Jesli chcesz "upodobnic" wyrazy do siebie cvzyli sprawic aby wyraz 2 był taki sam jak wyraz 1 oraz korzystasz z string to czemu nie zrobisz wyraz2 =wyraz1;  ?
komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
Dlatego że wg polecenia muszę to zrobić po przez przesuwanie znaków i potem zliczyć przesunięcia, ale zliczenie to nie problem
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)

Program wyrzuca jakiś bład?

if (replacement[i] == tab1[i]) 

takie porównanie jest ok

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)

Jak na screenie:

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
A może to przez to że wstawiam '\0' w poprzedniej pętli? i dlatego czyta jako char?
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)

Problem jest w tym:

string *replacement = new string[w_longitude];

tutaj tworzysz tablice stringow. A potem w linijce :

tab2[i] = replacement[i];

Probojesz przypisac tab2[i] ktory jest charem replacement[i] ktory jest stringiem.

To wywyalil ci kompilator

komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
No i porownanie o ktorym mowisz tez jest string == char

Wczesniej nie zwrociłem uwagi ze replacement jest tablica string
komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
OK, rozumiem. Muszę więc poszukać jak wyciąć char z tablicy bo nie mam na to pomysłu. Myślałem że przypisuje tylko wartość o wskazanym indeksie. Dziękuje!
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
Co masz na mysli jak wyciagnac char z tablicy?

Jesli to tablica charow / string to po prostu:

char znak = wyraz[i];

Tylko ze u cb replacment to nie tablica charow / string tylko tablica stringow w tym wypadku moglbys zrobic tak:

char znak = replacement[i][j];
komentarz 11 grudnia 2018 przez j23 Mędrzec (186,380 p.)

Dlatego że wg polecenia muszę to zrobić po przez przesuwanie znaków i potem zliczyć przesunięcia, ale zliczenie to nie problem

Nie prościej tak:

    std::string s1 = "asd";
    std::string s2 = "das";
    std::string s3 {s2 + s2};
    
    auto p = s3.find(s1);
    if(p != std::string::npos)
        std::cout << "przesuniecie: " << p << '\n';

?

0 głosów
odpowiedź 11 grudnia 2018 przez niezalogowany

Nie można porównać stringa z char. Chyba niepotrzebnie robisz tablicę:

string replacement(w_longitude);

Podobne pytania

0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 18 lipca 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 186 wizyt

89,777 zapytań

138,386 odpowiedzi

309,503 komentarzy

59,681 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 1088p. - Argeento
  2. 1032p. - nidomika
  3. 1024p. - rucin93
  4. 1020p. - Michal Drewniak
  5. 1014p. - Łukasz Eckert
  6. 1006p. - Mikbac
  7. 988p. - TheLukaszNs
  8. 963p. - JMazurkiewicz
  9. 960p. - adrian17
  10. 945p. - Jarosław Roszyk
  11. 941p. - Hubert Chęciński
  12. 920p. - Mawrok
  13. 914p. - overcq
  14. 859p. - ssynowiec
  15. 848p. - Adam Salamon
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...