• 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.

Object Storage Arubacloud
0 głosów
536 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 Ekspert (346,320 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 Ekspert (346,320 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 Ekspert (346,320 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ź 508 wizyt
0 głosów
1 odpowiedź 123 wizyt
0 głosów
1 odpowiedź 337 wizyt
pytanie zadane 16 stycznia 2020 w C i C++ przez AlpenGod Nowicjusz (170 p.)

92,690 zapytań

141,603 odpowiedzi

320,103 komentarzy

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

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!

...