Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。
Input
输入为一行字符串str1,其中可能包含空格。字符串长度不超过80个字符。
Output
输出处理好的字符串str2。
Sample Input
$Ts!47&s456 a23 +B9k
Sample Output
47456239*
Hint
Source
本题可以用单词统计的思想来输出“*”
如果输出了个“*”,而没有在输出数字便不继续输出“*”
*
*
*
方法一:用一个数组直接按要求输出
*
*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[81];
int i,flag = 1;
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]<='9'&&a[i]>='0')
{
printf("%c",a[i]);
flag = 1; //标记变量,标记是否输出了数字
}
else
{
if(flag == 1) //若上一个输出为数字,变输出“*”
{
printf("*");
flag = 0; //标记变量,标记输出了“*”
}
}
}
return 0;
}
运行结果:
$Ts!47&*s456 a23* +B9k
*47*456*23*9*
Process returned 0 (0x0) execution time : 4.608 s
Press any key to continue.
方法二:借助另一个数组,按要求将数据存放在其中
*
*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[81],b[81];
int i,k = 0,n = 1;
gets(a);
for(i=0; a[i]!='\0'; i++)
{
if(a[i]<='9'&&a[i]>='0')
{
b[k++] = a[i];
n = 1;
}
else if(n==1)
{
b[k++] = '*';
n=0;
}
}
for(i=0; i<k; i++)
printf("%c",b[i]);
return 0;
}
运行结果:
$Ts!47&*s456 a23* +B9k
*47*456*23*9*
Process returned 0 (0x0) execution time : 4.313 s
Press any key to continue.