C++ 11, kullanma std::stoi
olarak:
std::string s = "10";
int i = std::stoi(s);
std::stoi
dönüştürme işlemi olamaz tip std::invalid_argument
ait istisna, ya da taşma dönüştürme sonuçları ise std::out_of_range
olabilir (yani, dize değeri int
türü için çok büyük olduğunda). std::stol
veya std:stoll
'u kullanabilirsiniz, ancak int
giriş dizesi için çok küçük görünüyor. Gelen
C++, aşağıdakilerden herhangi biri kullanılabilir/98 03: yukarıdaki iki yaklaşım giriş s = "10jh"
başarısız olacağı
std::string s = "10";
int i;
//approach one
std::istringstream(s) >> i; //i is 10 after this
//approach two
sscanf(s.c_str(), "%d", &i); //i is 10 after this
not edin. Hatayı bildirmek yerine 10 döndürürler. Bu nedenle güvenli ve sağlam yaklaşım, giriş dizesini ayrıştıran kendi fonksiyonunuzu yazmaktır ve her bir karakterin rakam olup olmadığını kontrol etmek için doğrulayın ve sonra buna göre çalışın. my another solution arasında
int to_int(char const *s)
{
if (s == NULL || *s == '\0')
throw std::invalid_argument("null or empty string argument");
bool negate = (s[0] == '-');
if (*s == '+' || *s == '-')
++s;
if (*s == '\0')
throw std::invalid_argument("sign character only.");
int result = 0;
while(*s)
{
if (*s >= '0' && *s <= '9')
{
result = result * 10 - (*s - '0'); //assume negative number
}
else
throw std::invalid_argument("invalid input string");
++s;
}
return negate ? result : -result; //-result is positive!
}
Bu çözelti hafifçe değiştirilmiş versiyonu: Burada tek bir dayanıklı implemtation (denenmemiş de).
Muhtemelen (std :: ') dizgisi s =" 10 "' anlamına geliyordu. – lijie
http://stackoverflow.com/questions/200090/how-do-you-convert-ac-string-to-an-int ve http://stackoverflow.com/questions/194465/how-to-parse sayfasının kopyası -a-string-to-an-int-in-c –
@lijie - belki, ama bunu asla kodumda söylemedim ... Olmalı mıyım? – kralco626