描述
给定一个字符串,其中含有数字字符和非数字字符,将其中的连续数字字符作为整数。输出这样的整数,并指出其个数。给定一个字符串,其中含有数字字符和非数字字符,将其中的连续数字字符作为整数。输出这样的整数,并指出其个数。
输入
输入数据有若干行,每行上有一个字符串对应一种情形。字符串中的整数个数不超过10000个,字符串的长度不超过65536字符。
输出
对于每一种情形,先输出“Case #:”(#为序号,从1起),然后输出其中整数的个数(加括号),及具体的数值,换行。
样例输入1
a123x456U17960?302t ab5876
202.120.127.211
1st8.35t3
abc defg
样例输出1
Case 1: (5) 123 456 17960 302 5876
Case 2: (4) 202 120 127 211
Case 3: (4) 1 8 35 3
Case 4: (0)
在经历数次WA后,发现了导致WA的小细节:
- 无整数,输出右括号后直接换行,没有空格
- 有整数,最后一个数字输出后直接换行,没有空格
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 20000;
char str2[N];
string str1;
int main()
{
int t = 0;
while(getline(cin, str1))
{
memset(str2, '\0', N); //初始化数组str2
str2[0] = ' '; //对第一个元素赋初值' ',便于后面输出
t ++; //情形序号递增
int count = 0, i, j = 1, k;
for(i = 0; i < str1.length(); i ++)
{
if(str1[i] >= '0' && str1[i] <= '9')
{
str2[j++] = str1[i];//提取数字
if(str1[i+1] >= '0' && str1[i+1] <= '9')
continue;
str2[j++] = ' '; //后一位是数字,继续循环;不是数字,写一个空格
}
}
str2[j - 1] = '\0'; //将最后一个空格改为'\0',防止输出中多出一个空格
for(i = 1; i <= j - 2; i ++)
if(str2[i] >= '0' && str2[i] <= '9' && (str2[i+1] == ' ' || str2[i+1] == '\0'))
count ++; //统计数字个数
cout << "Case " << t << ": (" << count << ")";
if(count != 0)
cout << str2; //输出具体数字
cout << endl;
}
return 0;
}