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

C++ Vector<string> - problem z push_backiem stringów.

Cloud VPS
0 głosów
869 wizyt
pytanie zadane 16 marca 2021 w C i C++ przez Pawolo122 Początkujący (330 p.)

Mam problem z wczytaniem znaków do vectora. Program wyciąga samogłoski ze słów. Błąd: no matching function for call to 'std::vector<std...' itd. Błąd w linijce z push_back.

void zadanie3()
{
    string a;
    vector<string>vowel;
    ifstream in("tekst.txt");
    ofstream of("wyniki.txt");

    for(int i=0; i<1876; i++)
    {
        in >> a;
        for(int j=0; j<a.length(); j++)
        {
            if(a[j]=='A' || a[j]=='E' || a[j]=='I' || a[j]=='O' || a[j]=='U' || a[j]=='Y')
                vowel.push_back(a[j]);
        }
        
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 16 marca 2021 przez TOM_CPP Pasjonat (22,640 p.)

Próbujesz wstawiać do wektora przechorowującego obiekty typu string zmienne typu char. Zamień na

vector<char> vowel;

lub użyj zwykłego stringu.

string vowel;

.....

for( const auto& sign : a )
{
     if(sign =='A' || sign =='E' || sign =='I' || sign =='O' || sign =='U' || sign =='Y')
         vowel += sign ;
}

 

 

+1 głos
odpowiedź 16 marca 2021 przez adrian17 Mentor (354,120 p.)
for(int j=0; j<a.length(); j++)

Tu masz pętlę po znakach stringa...

vowel.push_back(a[j]);

A tutaj próbujesz dodać do vectora pojedynczy znak tego stringa. Ale znak to nie string. Więc się musisz zdecydować - albo dodajesz cały string `a`, albo jego kolejne znaki zamieniane na stringi.

komentarz 16 marca 2021 przez Pawolo122 Początkujący (330 p.)
Mógłbyś poprawić kod, w podobnej składni, żeby wczytać stringi do wektora? Zamieniałem chary na stringi, ale wywalało inne błędy.
komentarz 16 marca 2021 przez adrian17 Mentor (354,120 p.)

Zamieniałem chary na stringi, ale wywalało inne błędy.

To musisz je pokazać :)

komentarz 18 marca 2021 przez Pawolo122 Początkujący (330 p.)
Potraktowałem całość stringstreamem i teraz wywala taki błąd: No match for 'operator==' (operand types are)...

https://pastebin.pl/view/271623d5
komentarz 19 marca 2021 przez adrian17 Mentor (354,120 p.)

Ale... co? Zrobiłeś dziwną zmianę w miejscu które poprawnie działało.

if(a[j]=='A'

to było OK, porównywałeś znak ze znakiem.

if(a[j]==char_to_string('A')

To nie ma sensu, porównujesz znak ze stringiem.

Problem był z linią niżej, z

vowel.push_back(a[j]);

Tak jak pisałem wcześniej:

Więc się musisz zdecydować - albo dodajesz cały string `a`, albo jego kolejne znaki zamieniane na stringi.

(albo przechowuj znaki w vectorze - bo tbh nie rozumiem po co Ci vector jednoznakowych stringów, jak vector<char> robi to samo ale prościej)

Podobne pytania

0 głosów
1 odpowiedź 694 wizyt
0 głosów
1 odpowiedź 213 wizyt
0 głosów
1 odpowiedź 514 wizyt
pytanie zadane 16 stycznia 2020 w C i C++ przez AlpenGod Nowicjusz (170 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

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

Kursy INF.02 i INF.03
...