天梯赛习题
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
代码示例:
include
include
using namespace std;
int main()
{
string s1, s2;
string line;
getline(cin, line);
size_t spacePos = line.find(' ');
s1 = line.substr(0, spacePos);
s2 = line.substr(spacePos + 1);
bool validA = true;
for(int i = 0; i < s1.size(); i++)
{
if(s1[i] > '9' || s1[i] < '0')
{
validA = false;
break;
}
}
if(validA)
{
int num = stoi(s1);
if(num < 1 || num > 1000)
validA = false;
}
bool validB = true;
for(int i = 0; i < s2.size(); i++)
{
if(s2[i] > '9' || s2[i] < '0')
{
validB = false;
break;
}
}
if(validB)
{
int num = stoi(s2);
if(num < 1 || num > 1000)
validB = false;
}
cout << (validA ? s1 : "?") << " + "
<< (validB ? s2 : "?") << " = "
<< (validA && validB ? to_string(stoi(s1) + stoi(s2)) : "?") << endl;
system("pause");
return 0;
}
不熟悉的知识点:
1.stoi(s)函数:
标准库函数(需包含
2.line.substr(pos,len)函数
字符串成员函数,截取子字符串:
从索引pos开始,截取长度为len的字符串,可直接作为赋值函数
3.to_string(num)函数
标准库函数,将整数num转换为string类型
4.对于size_t
他不是关键字,而是标准库中定义的无符号整数类型(unsigned integer type),专门用于表示对象大小、数组索引、容器长度等非负整数场景。
5.find(s)函数
字符串成员函数,用于查找字符串中的第一个s出现的位置,返回值为size_t类型的索引。
OK就这些,如果自己写也能写出来,不过会比这个麻烦很多,这些新函数学会多用就行了。
浙公网安备 33010602011771号