检测输入是字符串还是整数

时间:2019-06-10 11:30:42

标签: c++

请告诉我我的方法有什么问题。

#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);
}

无论我输入什么,它总是返回“字符串”。 我看过这里发布的其他问题,但是请告诉我我的方法有什么问题。

2 个答案:

答案 0 :(得分:4)

标准库具有isdigit函数,该函数告诉您char是否为数字。

在此,您将检查输入的每个char是一个数字,一旦找到一个非数字的字符string,则返回{否则返回int

例如1234返回intsdf返回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);
}