1259 - C语言10.29

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

输入一个字符串,这个字符串包含了数字和非数字字符。例如:

a123x456  17960?   302tab5876
将其中连续的数字作为一个整数,依次存放到一个数组中,不妨将这个数组命名为a。对于以上的示例字符串,123存放在a[0]中,456放在a[1]中,余此类推。统计共有多少个整数,并依次输出这些整数。

题目输入

只有一行,符合题目描述的一个字符串。输入保证没有整数包含前导0,且整个字符串中每一组连续的数字数量不超过5个,加号(+)和减号(-)不表示整数的正负号。字符串的长度不超过500。

题目输出

第一行输出共有多少个整数,第二行依次输出这些整数,在每个整数后输出一个空格。

请注意行尾输出换行。

输入/输出样例

输入格式

qwer256  ci 23xxTI10999x P2q5t7

输出格式

6
256 23 10999 2 5 7 

C语言解答

#include<stdio.h>
#include<string.h>
int main()
{	
	char q[510],a[510][510];
	int i,j=0,k=0,s=0;
	gets(q);
	for(i=0;i<strlen(q);i++)
	{
		if(!(q[i]>='0'&&q[i]<='9'))
		continue;
		a[k][j++]=q[i];
		if(!(q[i+1]>='0'&&q[i+1]<='9'))
		{   a[k][j]=0;
			j=0;
			k++;
		continue;
		}
	}
	printf("%d\n",k);
	for(i=0;i<k;i++)
	{
		printf("%s ",a[i]);
	}
  printf("\n");
	return 0;

}

C++解答

#include <stdio.h>
int main() {
	int i, current, count, vals[500];
	char ch, lastch;
	count = 0;
	/* 使用current变量标志当前是否有没有处理完毕的整数
	   -1表示没有,否则表示当前整数已处理的值 */
	current = -1;
	while ((ch = getchar()) != '\n') {
		if ('0' <= ch && ch <= '9') {
			if (current == -1) {
				current = ch - '0';
			} else {
				current = current * 10 + (ch - '0');
			}
		} else {
			if (current != -1) {
				vals[count] = current;
				count++;
				current = -1;
			}
		}
	}
	/* 不要忘记在读取完整个字符串之后判断一下是否还有
	   未处理完毕的整数 */
	if (current != -1) {
		vals[count] = current;
		count++;
		current = -1;
	}
	printf("%d\n", count);
	for (i = 0;i < count;i++)
		printf("%d ", vals[i]);
	printf("\n");
	return 0;
}