2017-12-17 1 views
0

Ich habe ein Stück Code:Konvertierung von String-Array-Element in Int in C++ mit stoi()?

#include <bits/stdc++.h> 
using namespace std; 

int main() { 
//ios_base::sync_with_stdio(false); 
string s[5]; 

s[0] = "Hello"; 
s[1] = "12345"; 

cout << s[0] << " " << s[1] << "\n"; 
cout << s[0][0] << " " << s[1][1] << "\n"; 

int y = stoi(s[1]);   //This does not show an error 
cout <<"y is "<< y << "\n"; 
//int x = stoi(s[1][1]);  //This shows error 
//cout <<"x is "<< x << "\n"; 
return 0; 
} 

Der Ausgang dieses Codes ist:

Hello 12345 
H 2 
y is 12345 

Aber es zeigt einen Fehler, wenn ich Kommentar-

int x = stoi(s[1][0]); 
cout <<"x is "<< x << "\n"; 

Wenn in beiden Fällen a string wird in int umgewandelt mit stoi() Funktion dann warum spät r Teil des Codes gibt einen Fehler?
Ich habe das gleiche mit atoi(s[1][0].c_str()) versucht, aber es gibt auch einen Fehler.

Was ist die Alternative dafür, wenn ich den zweiten Typ von Elementen in int konvertieren will?

+1

, was Sie 's nach [1] [0]' bezieht sich auf? –

+0

Es sollte ein String-Element sein, denke ich. @ AditiRawat –

+2

Bitte lesen Sie [Warum sollte ich nicht enthalten?] (Https://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h) –

Antwort

0

s[1] ist ein std::string, also s[1][0] ist ein einzelnes char in dieser Zeichenfolge.

Aufruf std::stoi() mit einem char als Eingabe funktioniert nicht, weil es nur ein std::string als Eingabe verwendet, und std::string keinen Konstruktor hat, der nur eine einziges char als Eingabe verwendet.

zu tun, was Sie versuchen, müssen Sie diese stattdessen tun:

int x = stoi(string(1, s[1][0])); 

Oder

int x = stoi(string(&(s[1][0]), 1)); 

Ihr Anruf zu atoi() funktioniert nicht, weil Sie c_str() auf ein anrufen möchten single char statt der std::string gehört zu, zB:

int x = atoi(s[1].c_str()); 
+0

Also, das kann nicht mit atoi() implementiert werden? 'int x = atoi (s [1] [0])' funktioniert auch nicht? –

+0

Ja, Atoi funktioniert gut. 'int x = atoi (& s [1] [0])'. Ich habe das "&" vergessen. Vielen Dank, ich habe heute etwas gelernt :) –

+0

@ sarthak-sopho 'atoi()' erwartet eine Null-terminierte C-style-Zeichenkette als Eingabe, Sie können ihr kein einziges 'char' übergeben, es sei denn, Sie kopieren sie in ein' char [2] 'first, wobei' [0] 'das Zeichen ist und' [1] 'null ist –

-1

stoi hat als Eingabe eine Zeichenfolge, nicht ein Zeichen. Versuchen Sie folgendes:

string str(s[0][0]); 
int y = stoi(str); 
+0

' std :: string' hat keinen 1-Parameter-Konstruktor, der ein 'char' als Eingabe akzeptiert –

Verwandte Themen