串的简单处理
时间: 1ms 内存:128M
描述:
串的处理
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
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
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<string.h>
void del(char str[])
{
int i,n,b,l,c;
n=strlen(str);
l=n;
for(i=0;i<l;i++)
{
if(((str[i]==32)&&(str[i+1]>='a'&&str[i+1]<='z'))&&(i!=0))
{
str[i+1]=str[i+1]-32;
}
else if(i==0)
{
if(str[i]>='a'&&str[i]<='z')
{
str[i]=str[i]-32;
}
else if(((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))&&(str[i+1]>='0'&&str[i+1]<='9'))
{
l=l+1;
for(b=l;b>i+2;b--)
{
str[b]=str[b-1];
}
str[i+1]='_';
i=i+1;
}
}
else if((str[i]==32)&&(str[i+1]==32))
{
for(b=i+1;b<l;b++)
{
if(str[b]!=32)
break;
}
if(str[b]>='a'&&str[b]<='z')
str[b]=str[b]-32;
for(c=i+1;str[c]!='\0';c++,b++)
{
str[c]=str[b];
}
str[c]='\0';
l=strlen(str);
}
else if((str[i]>='0'&&str[i]<='9')&&((str[i+1]>='a'&&str[i+1]<='z')||(str[i+1]>='A'&&str[i+1]<='Z')))
{
l=l+1;
for(b=l;b>i+1;b--)
str[b]=str[b-1];
str[i+1]='_';
i=i+1;
}
else if(((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))&&(str[i+1]>='0'&&str[i+1]<='9'))
{
l=l+1;
for(b=l;b>i+1;b--)
{
str[b]=str[b-1];
}
str[i+1]='_';
i=i+1;
}
}
str[l]='\0';
printf("%s\n",str);
}
int main()
{
char str[301];
gets(str);
del(str);
return 0;
}
参考答案(时间最优[0]):
#include<iostream>
#include<cstring>
#include<cstdio>
char s[100];
using namespace std;
int main()
{
int a(char str[],int n);
int b(char str[],int n);
int c(char str[],int n);//函数声明
char str[100];
int n;
gets(str);
n=strlen(str);//50cat do60 s1t2k30
a(str,n);//调用函数
b(str,n);
c(str,n);
cout<<str;
return 0;
}
int a(char str[],int n)//把数字与字母之间用下划线字符(_)分开,使得更清晰(插入字符)
{
int i,j;
for(i=0;str[i]!='\0';i++)
{//判断是字母与数字连在一起的之间用下划线
if((str[i]>='a'&&str[i]<='z')&&(str[i+1]>='0'&&str[i+1]<='9')||(str[i]>='0'&&str[i]<='9')&&(str[i+1]>='a'&&str[i+1]<='z'))
{
strcpy(s,str+i+1);//现将要插入下划线的后面保存
str[i+1]='_';//插入下划线
strcpy(str+i+2,s);//再将刚刚保存的数换回去
for(j=0;s[j]!='\0';j++)//将s数组清0
s[i]=0;
}
}
return 0;
}
int b(char str[],int n)//把单词中间有多个空格的调整为1个空格(删除字符)
{
int i,j;
for(i=0;i<n;i++)
{
if(str[i]==' '&&str[i+1]==' ')//判断是不是多个空格连在一起
{
strcpy(s,str+i+1);//将要删除的后面保存
strcpy(str+i,s);//整体前移,相当于删除
for(j=0;s[j]!='\0';j++)
s[i]=0;//将s数组清0
i--;//有了新数,重新判断
}
}
return 0;
}
int c(char str[],int n)//把每个单词的(首字母变为大写)
{
int i;
if(str[0]>='a'&&str[0]<='z')
str[0]=str[0]-32;
for(i=1;i<n;i++)
{
if(str[i]==' '&&(str[i+1]>='a'&&str[i+1]<='z'))//判断位置
str[i+1]=str[i+1]-32;
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。