我对编程很新,我试图让函数工作,将字符串转换为int。我对这个函数的想法是收集字符串中的每个数字并将其存储在另一个字符串中,然后将其转换为int。
该函数返回值0。
这个函数应该做的是返回转换后的数字。哪个不应该是0。
int getNumberFromString(int convertedNumber, string textToConvert)
{
for (int i = 0; i < textToConvert.size(); i++)
{
string collectNumbers;
int j = 0;
if (textToConvert[i] == '1' || textToConvert[i] == '2' || textToConvert[i] == '3' ||
textToConvert[i] == '4' || textToConvert[i] == '5' || textToConvert[i] == '6' ||
textToConvert[i] == '7' || textToConvert[i] == '8' || textToConvert[i] == '9' || textToConvert[i] == '0')
{
collectNumbers[j] = textToConvert[i];
j++;
}
if (collectNumbers.size() == 0)
{
return false;
}
else if (collectNumbers.size() > 0)
{
stringstream convert(collectNumbers);
if (!(convert >> convertedNumber))
{
convertedNumber = 0;
}
return convertedNumber;
}
}
}
答案 0 :(得分:1)
也许你应该只使用库函数?
int stoi (const string& str, size_t* idx = 0, int base = 10);
答案 1 :(得分:1)
你想要更像的东西:
int getNumberFromString(int convertedNumber, string textToConvert) {
int retval = 0;
for (auto c: textToConvert) {
retval *= 10;
retval += c - '0';
}
return retval;
}
如果您需要对其进行编码,或者只是使用stoi()
答案 2 :(得分:1)
您的主要问题是您在收集所有数字之前尝试转换数字。你应该循环遍历所有数字(使用isdigit
或if (x >= '0' && x <= '9')
以避免单个数字的长列表 - 或者,如果你真的想列出所有数字,请使用switch
使其更具可读性)。
收集完所有数字后,然后在循环后转换。
语句return false
将与return 0;
相同,因为false
将转换为值为零的整数。因此,您无法区分从字符串读取零值和返回false
之间的区别(这不是PHP或JavaScript,其中类型信息包含在返回值中)。