如何使用 stoi,如果字符串在 C++ 中有一个字母,则返回 false?
Posted
技术标签:
【中文标题】如何使用 stoi,如果字符串在 C++ 中有一个字母,则返回 false?【英文标题】:How to use a stoi, and return false if the string has a letter in c++? 【发布时间】:2015-09-18 22:35:39 【问题描述】:所以,我在C++中有这段代码,需要用stoi来测试String(a)是否有字母,如果没有,将数字发送给int,如果有则返回false。
我的代码
void main()
string a = "a1321";
int b;
if (stoi(a))
b = stoi(a);
cout << b << endl;
else cout << "ERROR"<< endl;
system("pause");
谁能帮忙?
【问题讨论】:
你需要查看stoi
如何表示失败:试试en.cppreference.com/w/cpp/string/basic_string/stol
你必须绝对使用 stoi 吗?
【参考方案1】:
由于stoi
在解析后返回整数值,因此不能直接使用返回值来检查正确性。
您可以捕获std::invalid_argument
异常,但它可能太多了。如果你不介意使用strol
C 函数而不是std::stoi
,你可以这样做
bool isNumber(const std::string& str)
char* ptr;
strtol(str.c_str(), &ptr, 10);
return *ptr == '\0';
它利用了函数将第二个char**
参数设置为传递字符串中的第一个非数字字符的事实,对于只包含数字的字符串,它应该是'\0'。
【讨论】:
抱歉我的无知,但是我该如何使用那个“& str”参数呢? 这是对字符串的 const 引用:en.cppreference.com/w/cpp/language/referencestoi
具有相同的第二个参数(它是可选的)【参考方案2】:
你可以这样写函数:
bool try_stoi(int & i, const string & s)
try
size_t pos;
i = stoi(s, &pos);
return pos == s.size();
catch (const std::invalid_argument&)
return false;
【讨论】:
抱歉我的无知,但是我该如何使用“int & i”和“string & s”参数呢? 失败条件太弱——需要使用第二个参数检测尾随非数字字符。 第二次检查,不比较指针内容(字符串包含空字符时可能会失败),比较指针在字符串中的位置。【参考方案3】://使用此代码
int main()
string a;
cin >> a;
try
int b;
b = stoi(a);
cout << b;
catch (exception e)
cout << "string not converted";
return 0;
【讨论】:
虽然这可能会回答问题,但您应该edit 您的回答包括对如何此代码块回答问题的解释。这有助于提供上下文,并使您的答案对未来的读者更有用。以上是关于如何使用 stoi,如果字符串在 C++ 中有一个字母,则返回 false?的主要内容,如果未能解决你的问题,请参考以下文章