编写一个程序以显示基本四种数据类型的大小,即整数,双精度,浮点型和字符型。
输入: 输入的第一行包含整数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
错误答案
答案 0 :(得分:0)
我开始研究此问题,以向OP提供一些见识,但是我得出的结论是,在OP原始问题的注释部分中还有许多其他问题:也就是说,这个问题或问题具有不确定的解决方案!
如果用户将以下任意数字作为单个实体输入,以将{{0
,1
,... 9
}输入到控制台,则至少可以解释为作为int
或char
类型,最坏的情况甚至可能是double
,但是如果没有'.'
字符,我们可以将其排除为候选字符。这个问题肯定有歧义。检查它是浮点数还是双精度点很容易;所有要做的就是检查字符串,看看是否至少有一个'.'
,然后是double
或float
,然后检查字符串的最后一个字符,看是否是f
,如果是,则是float
。检查是否是一个非数字字符很容易,但是在char
和int
之间区分单个字符数字是很麻烦的部分!
解决方法:
您可以得出结论,如果输入字符串是单个字符并且是非数字,则肯定是char
类型。
您可以得出结论,如果输入字符串是单个字符并且是数字ASCII[48 - 57]
,则可以得出结论,它是int
类型。这将被视为一种约束。
您可以得出结论,如果不是上述两个,则至少是float
或double
,并且当且仅当该字符的最后一个字符时,它才是float
。字符串是f
,但是必须存在.
才能使其成为两者之一。同样,这些将限制您接受接受的数据输入。