[c++] zliczanie liczb i wyrazow

0

witam
nie moge dojsc dlaczego wywala mi SIGSEGV.

 #include <iostream>
using namespace std;

int main(){
    int pom=0, dlugosc, wyraz=0, liczba=0;
    string slowo;
    while(getline(cin, slowo)){
        dlugosc=slowo.size();
        while(dlugosc>0){
            if((slowo[pom]>=char(65) and slowo[pom]<=char(90)) or (slowo[pom]>=char(97) and slowo[pom]<char(122))){
                wyraz++;
                dlugosc--;
            }
            if(slowo[pom]>=48 and slowo[pom]<=57){
                liczba++;
                dlugosc--;
            }
            while(slowo[pom] != char(32)){
                pom++;
                dlugosc--;
                }
            pom++;
        }
        cout<<liczba<<" "<<wyraz<<endl;
        pom=0;
        wyraz=0;
        liczba=0;
    }
    return 0;
}
0

użyj debugera

0
Wikipedia napisał(a)

SIGSEGV is the signal sent to a process when it makes an invalid memory reference, or segmentation fault.

            while(slowo[pom] != char(32)){
                pom++;
                dlugosc--;
                }

a co gdy słowo nie kończy się spacją?;>

0

ten fragment w srodku petli sprobuj tak:

dlugosc=slowo.size()-1;
if (dlugosc==-1) continue;
bool bliczba = true;
while (dlugosc>=0)
{
if (slowo[dlugosc]<'0' || slowo[dlugosc]>'9')
 {
  bliczba = false;
  break;
 }
dlugosc--;
}
if (bliczba)
  liczba++;
else
  wyraz++;

i zamiast getlina uzyj cin >> slowo

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