串的简单处理

串的简单处理

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注