目录
程序七:将一个字符串连续的空格删除要求只保留一个空格。例如:字符串中的内容为:I am a student,删除后,字符串中的内容应当是:I am a student
程序八:编写程序,其功能在s所指的字符串中每个数字字符之后插入一个&。
程序一:实现字符串逆序存放后输出。
main()
{ int i,n;
char str[100];
gets(str);
n=strlen(str);
for(i=n-1;i>=0;i--)
printf("%c",str[i]);
}
程序二:对字符串进行升序排序。
#include<string.h>
main()
{ char str[5][100],temp[100];
int i,j;
printf("请输入五组字符串");
putchar('\n');
for(i=0;i<5;i++)
gets(str[i]);
putchar('\n');
for(i=0;i<5-1;i++)
for(j=0;j<5-1-i;j++)
{
if(strcmp(str[j], str[j + 1]) > 0)
{
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1],temp);
}
}
for(i=0;i<5;i++)
puts(str[i]);
}
程序三:假定str 所指向的字母数字串中只包含数字和字母,实现除了字符串前的数字字符保留,其他的数字字符全部删除。例如:如果 s 的内容为:1234ABCD44432abcde7890,按规定删除后 s 的内容应当是:1234ABCDabcde。
main()
{
//1234ABCD44432abcde7890,按规定删除后 s 的内容应当是:1234ABCDabcde
char str[100];
int i,j;
gets(str);
for(i=0;str[i]>='0'&&str[i]<='9';i++) ;//记录第一次出现字母的位置
j=i;
for(;str[i]!=0;i++)
if(str[i]<'0'||str[i]>'9')//只包含数字和字母 除了数字就是字母
str[j++]=str[i];
str[j]='\0';
puts(str);
}
程序四:假定输入的字符串中只包含字母和*号。请编写程序,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。例如: 字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG
main()
{
//****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。
char str[100];
int i,j;
gets(str);
for(i=0;str[i]=='*';i++) ;//记录第一次出现的不是*的位置
j=i;
for(;str[i]!=0;i++)
if(str[i]!='*')
str[j++]=str[i];
str[j]='\0';
puts(str);
}
程序五:把数字字符串变为数值。
main()
{
//把数字字符串变为数值。输入:"123" 输出: 123
char str[100];
int i,j,sign,s=0;
gets(str);
for(i=0;str[i]!=0;i++)
{
if(str[i]=='+')
sign=1;
else if(str[i]=='-')
sign=-1;
else s=10*s+(str[i]-'0');
}
printf("%d",sign*s);
}
程序六:判断一个字符串是否回文。
main()
{ //ababa
char str[100];
int i,j;
gets(str);
for(i=0;str[i]!=0;i++) ;
j=i;
for(i=0;i<j/2;i++)
if(str[i]!=str[j-1-i])break;
if(i==j/2) printf("%s:是回文",str);
else printf("%s:不是回文",str);
}
程序七:将一个字符串连续的空格删除要求只保留一个空格。例如:字符串中的内容为:I am a student,删除后,字符串中的内容应当是:I am a student
main()
{
//I am a student,删除后,字符串中的内容应当是:I am a student
char str[100];
int i = 0;//遍历字符串str
int j = 0;//当前存放数据的下标
gets(str);
while(str[i] != '\0')
{
if(str[i]==' ' && str[i+1]==' ')//连续空格,不复制
i++;
else
str[j++] = str[i++];
}
str[j] = '\0';
printf("%s\n",str);
}
程序八:编写程序,其功能在s所指的字符串中每个数字字符之后插入一个&。
main()
{ //其功能在s所指的字符串中每个数字字符之后插入一个&
// a5b39cde a5&b3&9&cde
char s[100];
gets(s);
int i,j,n;
for(i=0;s[i]!=0;i++)
if(s[i]>='0'&&s[i]<='9')
{
n=0;
while(s[i+1+n]!=0)
n++;
for(j=i+n+1;j>i;j--)
s[j+1]=s[j];
s[j+1]='&';
i+=1;
}
puts(s);
}
程序九:求一个字符串中的单词个数。
main()
{ //求一个字符串中的单词个数。i am a student
char s[100];
int i,tag=1,num=0;
gets(s);
for(i=0;s[i]!=0;i++)
{
if(s[i]!=' '&&tag==1)
{num++; tag=0;}
if(s[i]==' ')
tag=1;
}
printf("一共有%d个单词",num);
}
程序十:求一个字符串最长的单词。
遍历该字符串只要发现当前位置为空格,或\0是则进行比较已有的最长长度,与现得到的单词长度,如果发现得到的单词长度大于已有单词长度,则修正当前的最长长度,并且保留当前的位置以便用于得到最长单词的起始位置,以及终止位置,直到所有字符结束。
main()
{
char ch[100];
int i,j,t,max=0,num=0;
gets(ch);
for(i=0;ch[i]!=0;i++) ;//求该字符串包含\0的个数
j=i;
for(i=0;i<=j;i++)
{
if(ch[i]!=' '&&ch[i]!=0)
num++;
else
{
if(max<num){max=num;t=i;}
num=0;
}
}
printf("最长的单词是:");
for(i=t-max;i<t;i++) //t-max => 17-7=10 最长单词的起始位置
printf("%c",ch[i]);
}