题目描述:
串的处理
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:1. 把每个单词的首字母变为大写。
2. 把数字与字母之间用下划线字符(_)分开,使得更清晰
3. 把单词中间有多个空格的调整为1个空格。
例如:
用户输入:
you and me what cpp2005program
则程序输出:
You And Me What Cpp_2005_program
用户输入:
this is a 99cat
则程序输出:
This Is A 99_cat
我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
假设用户输入的串长度不超过200个字符。
思路:
对于串采用栈的思想,对栈顶元素和待入栈的元素进行比较,以确定对其何种操作。
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char data[200];
char data2[300];
gets(data);
int i=0,j=0;
while(data[i]==' ')
i++; //去掉开头的所有空格
if(data[i]<='z'&&data[i]>='a')
data2[j]=data[i++]-32; //首字符大写
else
data2[j]=data[i++];
for(;i<strlen(data);i++){
if(data[i]==' '){
if(data2[j]==' ') //过滤重复的空格
continue;
else{
data2[++j]=data[i];
}
}
else if(data[i]>='a'&&data[j]<='z'){
if(data2[j]==' ') //单词首字符大写
data2[++j]=data[i]-32;
else if(data2[j]<='9'&&data2[j]>='0'){ //数字和字符之间加_
data2[++j]='_';
data2[++j]=data[i];
}
else{
data2[++j]=data[i];
}
}
else{
if(data2[j]>='A'&&data2[j]<='z'){ //数字和字符之间加_
data2[++j]='_';
data2[++j]=data[i];
}
else{
data2[++j]=data[i];
}
}
}
while(data2[j]==' '){ //去掉末尾的空格
j--;}
data2[j+1]='\0';
puts(data2);
system("PAUSE");
return 0;
}