请告诉我我的方法有什么问题。
#include <iostream>
#include <string>
using namespace std;
string datatype(string x) {
for (int k = 0; k < strlen(x.c_str());) {
for (int i = 0; i < 10; i++) {
char z = i;
if (x[k] == z) {
k++;
}
else {
return "string";
}
}
}
return "int";
}
int main() {
string inp;
cin >> inp;
cout << datatype(inp);
}
无论我输入什么,它总是返回“字符串”。 我看过这里发布的其他问题,但是请告诉我我的方法有什么问题。
答案 0 :(得分:4)
标准库具有isdigit函数,该函数告诉您char
是否为数字。
在此,您将检查输入的每个char
是一个数字,一旦找到一个非数字的字符string
,则返回{否则返回int
。
例如1234
返回int
,sdf
返回string
。
string datatype(string str) {
for (unsigned char c : str) {
if (!isdigit(c)) {
return "string";
}
}
return "int";
}
编辑:
此解决方案还处理前导-
和+
。它将为int
和-10
返回+10
,但为string
或+1+1
返回-10+10
。
string datatype(string str) {
if (str.size() == 1) {
return isdigit(str[0]) ? "int" : "string";
}
bool isInt = true;
for (int i = 1; i < str.size(); i++) {
isInt = isInt && isdigit(static_cast<unsigned char>(str[i]));
if (!isInt) {
break;
}
}
if (isInt) {
unsigned char c = str[0];
isInt = isInt && (c == '-' || c == '+' || isdigit(c));
}
return isInt ? "int" : "string";
}
答案 1 :(得分:0)
首先,因为x.c_str不在iostream和string中,所以将头文件(cstring)作为头文件包含在内。然后, 当你做char z = i时;在这里,您没有在z中存储i的等效字符,而是i的ascii值。 接下来,您将在i和x [k]之间的第一个不匹配处返回字符串。如果找不到任何可能的10位数字的匹配项,则应返回字符串。
您可以查看修改后的代码。
#include <iostream>
#include<cstring>
#include <string>
using namespace std;
string datatype(string x) {
for (int k = 0; k < strlen(x.c_str());k++) {
int flag=0;
for (int i = 0; i < 10; i++) {
// char z = i;
if ((x[k]-'0') == i || (k==0 && x[k]=='-')) {
flag=1;
break;
}
}
if(flag==0)
return "string";
}
return "int";
}
int main() {
string inp;
cin >> inp;
cout << datatype(inp);
}