串的处理【模拟】
题目描述
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
- 把每个单词的首字母变为大写。
- 把数字与字母之间用下划线字符(_)分开,使得更清晰
- 把单词中间有多个空格的调整为 1 个空格。
输入描述
用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由 1 个或多个空格分隔。假设用户输入的串长度不超过 200 个字符。
输出描述
输出处理好的字符串。
输入输出样例
示例
输入
you and me what cpp2005program
输出
You And Me What Cpp_2005_program
思路:
这道题主要就是几个任务,再输入字符时将多余的空格去除,在将单词的首字母换成大写。
在最后输出时候将数字和字母之间输出(_),注意在输出这个符号时,要分成两种情况:
1、字母在前,数字在后
2、数字在前,字母在后
其中第一种情况要考虑判断字母时要大小写都判断,例如 a6 有可能将 a 转化成了 A 这样在判断字母和数字时就不能单纯的判断小写的了
代码:
#include<stdio.h>
int main()
{
char s,x[300];
int flag=0,count=0;
while((s=getchar())!='\n')
{ //输入字符,去掉多余的空格
if(s!=' ')
{
x[count++]=s;
flag=1;
}
else if(ch==' '&&flag)
{
x[count++]=s;
flag=0;
}
}
for(int i=0;i<count;i++)
{ //将每个单词的首字符大写
if((i==0||x[i-1]==' ')&&x[i]>='a'&&x[i]<='z')
x[i]-=32;
}
for(int i=0;i<count;i++)
{ //输入的时候,在数字和字母之间输出(_)
printf("%c",x[i]);
if((x[i]>='a'&&x[i]<='z'||x[i]>='A'&&x[i]<='Z')&&x[i+1]>='0'&&x[i+1]<='9')
printf("_");
if(x[i+1]>='a'&&x[i+1]<='z'&&x[i]>='0'&&x[i]<='9')
printf("_");
}
return 0;
}