一些字符串的程序

本文介绍了十个关于字符串处理的C语言程序,包括字符串逆序、排序、删除数字、删除*号、转换数字字符串、判断回文、删除连续空格、插入字符、计算单词数以及寻找最长单词等操作。这些程序展示了字符串的基本操作和算法应用。
摘要由CSDN通过智能技术生成

目录

程序一:实现字符串逆序存放后输出。

程序二:对字符串进行升序排序。

程序三:假定str 所指向的字母数字串中只包含数字和字母,实现除了字符串前的数字字符保留,其他的数字字符全部删除。例如:如果 s 的内容为:1234ABCD44432abcde7890,按规定删除后 s 的内容应当是:1234ABCDabcde。

程序四:假定输入的字符串中只包含字母和*号。请编写程序,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。例如: 字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG

程序五:把数字字符串变为数值。

程序六:判断一个字符串是否回文。

程序七:将一个字符串连续的空格删除要求只保留一个空格。例如:字符串中的内容为: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]);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值