Skip to content

Latest commit

 

History

History
71 lines (58 loc) · 1.82 KB

2910.md

File metadata and controls

71 lines (58 loc) · 1.82 KB

提取数字 2910: 提取数字

题目要求提取字符串当中的数字,并分成多行输出。

题目来源

2910: 提取数字

总时间限制: 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。