我对此问题有疑问,我的输出不正确

时间:2019-01-31 06:07:21

标签: c++

编写一个程序以显示基本四种数据类型的大小,即整数,双精度,浮点型和字符型。

输入: 输入的第一行包含整数T,它表示测试用例的数量。对于每个测试用例,用户可以输入以上任何一种数据类型。

输出: 对于每个测试用例,只有一行输出显示该数据类型的大小。

约束: 1 <= T <= 100

示例:

输入:

4 
1
@
7.98
9.985647851

输出:

4
1
4
8

我尝试过

int main() {
    //code
    int x;
    cin>>x;
    std::string s;
    for(int i = 0;i<x;i++){
        cin>>s;
        cout << sizeof(s) << endl;
    }
    return 0;
}

输出原为

32
32

错误答案

1 个答案:

答案 0 :(得分:0)

我开始研究此问题,以向OP提供一些见识,但是我得出的结论是,在OP原始问题的注释部分中还有许多其他问题:也就是说,这个问题或问题具有不确定的解决方案!


推理

如果用户将以下任意数字作为单个实体输入,以将{{01,... 9}输入到控制台,则至少可以解释为作为intchar类型,最坏的情况甚至可能是double,但是如果没有'.'字符,我们可以将其排除为候选字符。这个问题肯定有歧义。检查它是浮点数还是双精度点很容易;所有要做的就是检查字符串,看看是否至少有一个'.',然后是doublefloat,然后检查字符串的最后一个字符,看是否是f,如果是,则是float。检查是否是一个非数字字符很容易,但是在charint之间区分单个字符数字是很麻烦的部分!


解决方法:

您可以得出结论,如果输入字符串是单个字符并且是非数字,则肯定是char类型。

您可以得出结论,如果输入字符串是单个字符并且是数字ASCII[48 - 57],则可以得出结论,它是int类型。这将被视为一种约束。

您可以得出结论,如果不是上述两个,则至少是floatdouble,并且当且仅当该字符的最后一个字符时,它才是float。字符串是f,但是必须存在.才能使其成为两者之一。同样,这些将限制您接受接受的数据输入。