2017-08-24 2 views
0

Ich möchte ein Zeichen in Integer konvertieren und seine Häufigkeit berechnen, aber ich erhalte diesen Fehler! Ich verwende XCODE.Beenden mit einer nicht abgefangenen Ausnahme vom Typ std :: invalid_argument: stoi: keine Konvertierung (lldb)

Abschluss mit nicht abgefangener Ausnahme vom Typ std :: invalid_argument: stoi: keine Konvertierung.

#include <iostream> 

int main(int argc, const char * argv[]) { 
std::string s; 
std::cin>>s; 

int a[27]; 
for(int i=0;i<s.length();i++) 
{ 
    int c; 
    c=std::stoi(&s[i]); 
    a[c]++; 
} 
for(int i=0;i<27;i++) 
    std::cout<<a[i]; 

return 0; 

}

+0

drucken möchten führen Ich bin mir ziemlich sicher, dass du 'stoi' nicht brauchst - es ergibt keinen Sinn. Was ist die erwartete Eingabe? –

+0

Warum übergeben Sie eine Adresse eines Strings an 'stoi'? [Es wird ein 'const' Verweis auf eine Zeichenfolge] (http://en.cppreference.com/w/cpp/string/basic_string/stol) – NathanOliver

+0

@IgorTandetnik Eingabe wäre eine Zeichenfolge. – yaoshinga

Antwort

0

zuerst prüfen, ob seine Alphazeichen, dann Zeichen und dann sub in Kleinbuchstaben umwandeln 'a', so dass Sie bekommen Wert 0-25.

if (isalpha(s[i])) 
{ 
    c= tolower(s[i]) - 'a'; 
    a[c]++; 
} 

Außerdem müssen Sie Array initialisieren a, weil es sofort

int a[26] = { 0 }; 

Und wenn Sie

for(unsigned int i=0;i<(sizeof(a)/sizeof(a[0]));i++) 
{ 
    std::cout << a[i]; 
} 

Here is the example.

+0

Danke! Das half – yaoshinga

+0

@yaoshinga So könnte man es als beantwortet markieren :-) –

Verwandte Themen