数字判断(指针为函数参数)

时间限制: 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;
}

留下评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

%d 博主赞过: