时间限制: 1 Sec 内存限制: 128 MB
题目描述
输入一个字符串,判断这个字符串是否一个完全整数值的字符串,例如输入”1234″,那么表示整数1234,输入”12a3″就表示只是一个字符串,不是一个整数
要求编写函数isNumber,参数是一个字符指针,返回值是整数类型
如果字符串表示一个整数,则计算出这个整数并且返回
如果字符串不是表示一个整数,则返回-1
主函数必须调用isNumber来判断字符串,不能使用任何C++自带或第三方的类似函数
输入
输入t表示有t个测试实例
每行输入一个字符串
依次输入t行
输出
每行输出判断结果
样例输入
3
1234
567a
0890
样例输出
1234
-1
890
提示
解决方案
有一说一,这题搞得我很火大。本来几句话就秒掉的题目,没想到后台数据竟然一份换行符是LR,一份是CRLF…搞得加了一堆删白符的代码,看着就不爽…早知道不这么写了。而且要是想让学生写的代码更好,至少也应该先讲过相关内容吧?不然一起怪OJ有问题很好玩么?
总而言之,说归说,最后还是一句话:我菜。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
bool isDigit(const char ch) {
return ('0' <= ch) && (ch <= '9');
}
bool isNumber(const char *string, size_t size) {
return std::find_if(string, (string + size), [](char ch) { return !isDigit(ch); }) == (string + size);
}
int main() {
size_t T;
std::cin >> T;
if (std::cin.get() == '\r') {
std::cin.get();
}
char string[1024]{};
while (T--) {
std::cin.getline(string, 1024);
// std::cout << string << std::endl;
size_t string_length = strlen(string);
if (string[string_length - 1] == '\r' || string[string_length - 1] == '\n') {
string[string_length - 1] = '\0';
string_length -= 1;
}
size_t leading_zero_amount = std::find_if_not(string, string + string_length, [](char ch) { return ch == '0'; }) - string;
std::cout << (isNumber(string, string_length) ? std::string(string + leading_zero_amount, string + string_length) : "-1") << std::endl;
}
return 0;
}