【发布时间】:2018-10-15 17:37:12
【问题描述】:
我创建了这个函数来将字符串转换为整数(学校作业),但我的函数似乎不起作用,如果它拾取任何非数字数据,它应该返回 INT_MAX。无论如何它都不会返回任何数据,而且似乎也不会返回 main。
#include <iostream>
#include <climits>
#include <string>
using namespace std;
int stringToInt(string input){
int i = 0;
if(input[i] == '-'){
i++;
//First while loop controls valid input
while(input[i] != '\0'){
if(input[i] < 49 || input [i] > 47){///Can't figure this out
return INT_MAX;
}
i++;
}
}
//Now to calculate result
int result = 0;
i = 0;
if (input[i] == '-'){
i++;
while (input[i] != '\0'){
result = (input[i] - 49) + (result * 10);
i++;
}
result = result * (-1);
return result;
}
else{
while (input[i] != '\0'){
result = (input[i] - 49) + (result * 10);
i++;
}
return result;
}
}
//////MAIN////////
int main(){
string number;
int actualNumber;
int answer;
cout << "This is my main function. Enter a string to evaluate" << endl;
getline(cin, number);
actualNumber = stringToInt(number);
cout << actualNumber;
cout << endl;
return 0;
}
【问题讨论】:
-
这并没有解决问题,而是使用提供此信息的标准函数而不是使用幻数(
input[i] < 48 || input[i] > 57):while (std::is digit(input[i])。这也使您免受不常见但并非不存在的可能性,即您会遇到不使用这些特定值的字符编码。 -
这也没有解决问题,但
input[i] - 48]最好写成input[i] - '0',语言定义说它适用于所有字符编码。