Description:
输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。
Input:
输入为一行字符串str1,其中可能包含空格。字符串长度不超过80个字符。
Output:
输出处理好的字符串str2。
Sample Input:
<pre>$Ts!47&*s456 a23* +B9k</pre>
Sample Output:
*47*456*23*9*
- 比较笨的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
char str1[82], str2[82];
gets(str1);
int len = strlen(str1);
for(int i = 0; i < len; i++)
{
if('0' <= str1[i] && str1[i] <= '9')
str2[i] = str1[i];
else
str2[i] = '*';
}
for(int i = 0; i < len; i++)
{
if('0' <= str2[i] && str2[i] <= '9')
cout << str2[i];
if(str2[i] == '*' && str2[i + 1] != '*')//这里不会产生数组越界问题吗?有大佬来解释一下吗?
cout << str2[i];
}
return 0;
}
比较聪明的代码
#include <stdio.h>
#include <stdlib.h>
#define IN 1
#define OUT 0
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int c;
int state;
while((c=getchar())!=EOF){
// int state=OUT;
if(c>='0'&&c<='9'){
printf("%c",c);
state=OUT;
}else if(state==OUT){
printf("*");
state=IN;
}
}
return 0;
}