题目要求提取字符串当中的数字,并分成多行输出。
总时间限制: 1000ms 内存限制: 65536kB
输入一个字符串,长度不超过30,内有数字字符和非数字字符,请找出字符串中所有由连续数字字符组成的正整数,并按出现顺序输出。
一个字符串,最大长度为100,不包含空格等空白符。
按出现顺序输出字符串中包含的正整数,每个数字一行,不要输出前导0。保证输入字符串中的正整数均在int范围内。
a123*456U17960?302tab5876
123
456
17960
302
5876
输入的字符串中没有空格,因此只需判断字符串中是否含有数字即可,对于连续的数字应当组成一个数,整体输出,如果一个数字一个数字输出会WA。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char cstr[101];
cin.getline(cstr, 101);
int i, num = 0;
bool b = false;
for (i = 0; i < strlen(cstr); ++i) {
if (cstr[i] >= '0' && cstr[i] <= '9') {
if (!b) {
b = true;
}
num *= 10;
num += cstr[i] - '0';
}
else {
if (b) {
cout << num << endl;
}
num = 0;
b = false;
}
}
if (b) {
cout << num << endl;
}
return 0;
}
2910.cpp 代码长度:437B 内存:196kB 时间:1ms 通过率:94% 最小内存:196kB 最短时间:0ms
判断字符串长度可以使用strlen,转换ASCII码后,可以设置一个标志位来判断数字是否连续,当发现第一个不是数字位时,将之前的数字输出。
有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。