C语言字符串操作(一)

来源:互联网 发布:淘宝窗帘上门安装服务 编辑:程序博客网 时间:2024/06/05 17:27

对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。


  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <stdlib.h>  
  4. #define N 30  
  5. /*********************************************** 
  6. *函数名称: fun 
  7. *创建时间: 2010.12.5 
  8. *描    述: 对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。 
  9. *参    数: char * s,int *m 
  10. *返 回 值: chLetter(数组chLetter[]的首元素地址) 
  11. *局部变量: char chLetter[N]; 
  12. *           char chNumber[N]; 
  13. *           int i,j,k; 
  14. ************************************************/  
  15. char * fun(char * s,int *m)             //参数m是通过调试才想到的  
  16. {  
  17.     char chLetter[N];   //用来存放字母  
  18.     char chNumber[N];   //用来存放数字  
  19.     int i,j,k;  
  20.     i=0;    //初始化  
  21.     j=0;    //j用来记录字母的个数  
  22.     k=0;    //k用来记录数字的个数  
  23.     for (i=0; i<N; i++)  
  24.     {  
  25.         if (s[i] >= 'A' && s[i] <= 'Z'            //将字母存入chLetter[]  
  26.             || s[i] >= 'a' && s[i] <= 'z')  
  27.         {  
  28.             chLetter[j]=s[i];  
  29.             j++;  
  30.         }  
  31.         if (s[i] >= '0' && s[i] <='9')            //将数字存入chNumber[]  
  32.         {  
  33.             chNumber[k]=s[i];  
  34.             k++;  
  35.         }  
  36.     }  
  37.     chLetter[j]='';  
  38.     chNumber[k]='';  
  39.     *m=j+k;                                     //用来返回最后输入和输出时字符的个数  
  40.     strcat(chLetter,chNumber);  
  41.     return chLetter;  
  42. }  
  43. //主函数  
  44. void main()  
  45. {  
  46.     char s[N];  
  47.     int i;  
  48.     int m;    
  49.     char *p;  
  50.     p=NULL;  
  51.     printf("请输入字符串(30字符以内):n");  
  52.     scanf("%s",s);  
  53.     p=fun(s,&m);                    //刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码  
  54.     for (i=0; i<m; i++)              //将返回的值复制给数组以待输出  
  55.     {  
  56.         s[i]=p[i];  
  57.     }  
  58.       
  59.     printf("结果为:");  
  60.     for (i=0; i<m; i++)              //输出结果  
  61.     {  
  62.         printf("%c",s[i]);  
  63.     }  
  64.     printf("n");  
  65. }  

将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串。

[cpp] view plaincopyprint?
  1.       
  2. #include <stdio.h>  
  3. #include <string.h>  
  4. #include <stdlib.h>  
  5. #define N 30    //s所指字符串的最大长度  
  6. #define T 2     //t1和t2所指字符串的长度  
  7.    
  8. /*********************************************** 
  9. *函数名称: fun 
  10. *创建时间: 2010.12.5 
  11. *描    述: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串 
  12. *参    数: char * s,char * t1, char * t2,int *m 
  13. *返 回 值: w(数组w[]的首元素地址) 
  14. *局部变量: char w[N]; 
  15. *           char temp[T]; 
  16. *           char t1temp[T]; 
  17. *           int i,j,k,l; 
  18. ************************************************/  
  19. char * fun(char * s,char * t1, char * t2,int *m)    //m的作用和第一题一样,没m最后两个字符会乱码(想寻求其他方法)        
  20. {  
  21.     char w[N];              //用来存放处理后的字符串  
  22.     char temp[T];       //用来存放从s所指字符串中截取的子串  
  23.     char t1temp[T];     //用来存放t1所指字符串  
  24.     int i,j,k,l;  
  25.     //向t1temp中存入t1所指字符串  
  26.     for (i=0; i<T;i++)  
  27.     {  
  28.         t1temp[i]=t1[i];  
  29.     }  
  30.     t1temp[T]='';  
  31.        
  32.     //求m所指的值  
  33.     for (i=0;i<N;i++)  
  34.     {  
  35.         if (s[i]=='')  
  36.         {  
  37.             *m=i;  
  38.         }  
  39.     }  
  40.    
  41.     //寻找相同时的最后一个字符的下标  
  42.     for (i=0; i<N; i++)  
  43.     {  
  44.         l=0;  
  45.         for (j=i; j<(i+T); j++,l++)  //截取长度为T的子串存到temp[]中  
  46.         {  
  47.             temp[l]=s[j];  
  48.         }  
  49.         temp[T]='';  
  50.    
  51.         if (strcmp(t1temp,temp) == 0)  
  52.         {  
  53.             k=i;        //k记录相同时的最后一个字符的下标  
  54.         }  
  55.     }  
  56.    
  57.     for (i=0; i<N; i++)  //赋值给w[]  
  58.     {  
  59.         j=0;  
  60.         if (i>=k && i<(k+T))      //在找到的k点处开始换值  
  61.         {  
  62.             w[i]=t2[j];             //换值  
  63.             j++;  
  64.         }  
  65.         else  
  66.         {  
  67.             w[i]=s[i];  
  68.         }  
  69.     }  
  70.        
  71.     return w;  
  72. }  
  73.    
  74. //主函数  
  75. void main()  
  76. {  
  77.     char s[N];  
  78.     char t1[T];  
  79.     char t2[T];  
  80.     int i;  
  81.     int m;  
  82.     char *p;  
  83.    
  84.     p=NULL;  
  85.     printf("请输入字符串(20字符以内):");  
  86.     scanf("%s",s);  
  87.     printf("请输入将要被替换的子字符串(仅限两个字符):");  
  88.     scanf("%s",t1);  
  89.     printf("请输入将要用来替换的字字符串(仅限两个字符):");  
  90.     scanf("%s",t2);  
  91.     p=fun(s,t1,t2,&m);                   
  92.     for (i=0; i<m; i++)              //将返回的值复制给数组以待输出  
  93.     {  
  94.         s[i]=p[i];  
  95.     }  
  96.        
  97.     printf("结果为:");  
  98.     for (i=0; i<m; i++)              //输出结果  
  99.     {  
  100.         printf("%c",s[i]);  
  101.     }  
  102.     printf("n");  
  103. }  

将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
[cpp] view plaincopyprint?
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.    
  5. #define N 30  
  6. /*********************************************** 
  7. *函数名称: fun 
  8. *创建时间: 2010.12.6 
  9. *描    述: 将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 
  10. *参    数: char * s,int * m 
  11. *返 回 值: return t,(t为指向数组的指针) 
  12. *局部变量: char * t; 
  13. *           char temp[N]; 
  14. *           int i,j=0; 
  15. ************************************************/  
  16.    
  17. char * fun(char * s,int * m)  
  18. {  
  19.     char * t;  
  20.     char temp[N];                   //临时的数组,用来存放t所指的数组  
  21.     int i,j=0;  
  22.        
  23.     t=temp;  
  24.     for (i=0; i<N; i++)  
  25.     {  
  26.         if (s[i]%2==0 )  
  27.         {  
  28.             temp[j]=s[i];           //如果是偶数,赋值给t所指的数组  
  29.             j++;     
  30.             if (s[i]=='')         //找到m的值先要找出输入了多少个字符  
  31.             {  
  32.                 break;  
  33.             }  
  34.         }  
  35.     }  
  36.     *m=j;                           //找到m的值即输出结果的长度  
  37.     t[j]='';  
  38.     return t;  
  39. }  
  40.    
  41. //主函数  
  42. void main()  
  43. {  
  44.     char s[N];  
  45.     int i;  
  46.     int m;   
  47.     char *p;  
  48.    
  49.     p=NULL;  
  50.     printf("请输入字符串(30字符以内):n");  
  51.     scanf("%s",s);  
  52.     p=fun(s,&m);                    //刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码  
  53.     for (i=0; i<m; i++)              //将返回的值复制给数组以待输出  
  54.     {  
  55.         s[i]=p[i];  
  56.     }  
  57.        
  58.     printf("结果为:");  
  59.     for (i=0; i<m; i++)              //输出结果  
  60.     {  
  61.         printf("%c",s[i]);  
  62.     }  
  63.     printf("n");  
  64. }  
0 0
原创粉丝点击