C语言(字符串,DEVFORGE学编程社区)

Posted on 2019-10-08 19:17  金色的省略号  阅读(599)  评论(0编辑  收藏  举报

1、字符串左中右

 1 #include<stdio.h>
 2 #include <string.h>
 3 #define N 100
 4 
 5 void Left(char src[], int n, char dest[]);
 6 void Right(char src[], int n, char dest[]);
 7 void Mid(char src[], int loc, int n, char dest[]);
 8 int main()
 9 {
10     int n,loc;
11     char src[N] = "";
12     char dest[N] = "";
13     scanf("%s",src);
14     scanf("%d%d",&n,&loc);
15     
16     Left(src,n,dest);
17     Right(src,n,dest);
18     Mid(src,loc,n,dest);
19     return 0;
20 }
21 void Left(char src[], int n, char dest[]){    
22     strncpy(dest,src,n);
23     printf("%s\n",dest);
24 }
25 void Right(char src[], int n, char dest[]){
26     int len = strlen(src);
27     strcpy(dest,&src[len-n]);
28     printf("%s\n",dest);
29 }
30 void Mid(char src[], int loc, int n, char dest[]){
31     strncpy(dest,&src[loc],n);
32     printf("%s\n",dest);
33 }

 2、分离单词

 1 #include<stdio.h>
 2 #include <string.h>
 3 #define N 256
 4 
 5 int main()
 6 {
 7     char str[N] = "";
 8     char s[N] = "";
 9     int count = 0;
10     gets(str);
11     
12     /* 从字符串str尾部逐个截取单词连接到字符串s*/    
13     for(char *p = str + strlen(str)-1; p>=str-1; p--)
14     {
15         if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'){
16             count++;
17         }
18         else{    
19             if(*(p+1)>='a'&&*(p+1)<='z'||*(p+1)>='A'&&*(p+1)<='Z'){
20                 strncat(s,(p+1),count);
21                 strcat(s," ");                
22             }                        
23             count=0;
24         }    
25     }
26     
27     puts(s);/* 输出 */
28     
29     return 0;
30 }

 3、删除字符

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include <string.h>
 4 #define N 100
 5 void deletechar(char s[],char c);
 6 int main()
 7 {
 8     char s[N] = "", c;
 9     gets(s);
10     c = getchar();
11     deletechar(s,c);
12     puts(s);
13     return 0;
14 }
15 void deletechar(char s[],char c){
16     char t[N] = "";
17     char *p = s, *q = t;
18     while(*p)
19     {
20         if(*p!=c)
21             *q++ = *p;
22         p++;
23     }
24     strcpy(s,t);
25 }

4、字符串复制

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include <string.h>
 4 #define N 100
 5 void copy(char s1[],char s2[], int m);
 6 int main()
 7 {
 8     char s1[N] = "", s2[N] = "";
 9     int m;    
10     gets(s1);
11     scanf("%d",&m);
12         
13     copy(s1,s2,m);
14     puts(s2);
15     return 0;
16 }
17 void copy(char s1[],char s2[], int m){
18     strcpy(s2,&s1[m]);
19 }

5、Music Composer

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include <string.h>
 4 #define N 100
 5 
 6 int main()
 7 {
 8     char key[10][3] = {"A#","Bb","C#","Db","D#","Eb","F#","Gb", "G#", "Ab"};
 9     char s1[N] = "", s2[N] = "";
10     scanf("%s%s",s1,s2);
11     
12     if(strlen(s1)==1)
13         strcpy(s1,"UNIQUE");
14     else{
15         for(int i=0; i<10; ++i)
16         {    
17             if(!strcmp(s1,key[i])){            
18                 if(i%2)  i--;            
19                 strcpy(s1,key[i]);
20                 break;                
21             }
22         }
23         puts(strcat(strcat(s1," "),s2));
24     }    
25     return 0;
26 }

6、字符串逆序

 1 #include<stdio.h>
 2 #define N 100
 3 /* 不让用字符串处理函数 */
 4 int main()
 5 {
 6     char s[N] = "";
 7     gets(s);
 8     /* 计算字符串长度 */
 9     int i;
10     for(i=0; s[i]!='='; ++i);
11     /* 去掉字符串中的=字符 */
12     char *p = s, *q = s + i;
13     *q-- = '\0';
14     /* 逆序 */
15     while(p<q)
16     {
17         char c = *p;
18         *p = *q;
19         *q = c;
20         p++,q--;
21     }
22     /* 输出 */
23     puts(s);
24     return 0;
25 }

7、字符串排序

 1 #include<stdio.h>
 2 #include <string.h>
 3 #define N 10
 4 void QuickSort(char a[][N],int n, int left, int right);
 5 int main()
 6 {
 7     char str[N][N] = {""};
 8     for(int i=0; i<10; ++i)
 9         scanf("%s",str[i]);    
10     QuickSort(str,10,0,9);
11     for(int j=0; j<10; ++j)
12         printf("%s ",str[j]);
13     return 0;
14 }
15 /*快速排序*/
16 void QuickSort(char a[][N],int n, int left, int right)
17 {
18     int i,j; 
19     char t[10] = "";       
20     if(left<right){
21         i=left,j=right+1;/*左右指针*/
22         while(i<j){
23             while(i+1<n && (-1 == strcmp(a[++i],a[left])));
24             while(j-1>-1 && (1 == strcmp(a[--j],a[left])));
25             if(i<j)
26             {strcpy(t,a[i]);strcpy(a[i],a[j]);strcpy(a[j],t); }            
27         }
28         strcpy(t,a[left]);strcpy(a[left],a[j]);strcpy(a[j],t);
29         QuickSort(a,n,left,j-1);
30         QuickSort(a,n,j+1,right);
31     }
32 }

8、字符串替换

 1 #include<stdio.h>
 2 #include <string.h>
 3 #define N 1000
 4 
 5 void ReplaceAll(char *str, const char *you, const char *we);
 6 int main()
 7 {
 8     char str[N] = "";
 9     gets(str);
10     ReplaceAll(str,"you","we");
11     puts(str);
12     return 0;
13 }
14 
15 void ReplaceAll(char *str, const char *you, const char *we)
16 {
17     char temp[N] = "";
18     char *prv = str;
19     char *pos = strstr(str, you);
20     while (pos) {
21         strncat(temp, prv, pos - prv);/*字符串不含you的字符连接到temp*/
22         pos += strlen(you);
23         prv = pos;/*指针后移,忽略字符串you*/
24         strcat(temp, we);/*字符串we连接到temp*/
25         pos = strstr(prv, you); /*继续寻找字符串you*/      
26     }
27     strcat(temp,prv);/*连接剩余字符*/
28     strcpy(str,temp);/*拷贝回字符串str*/
29 }

9、Coin  Test

 1 #include<stdio.h>
 2 #include <math.h>
 3 #define N 256
 4 
 5 void fun(int u, int sum);
 6 int main()
 7 {
 8     int u = 0, d = 0, s = 0;
 9     char str[N] = "";
10     gets(str);
11     char *p = str;
12     
13     while(*p)
14     {
15         if(*p=='U') u++;
16         if(*p== 'D') d++;
17         if(*p=='S') s++;
18         p++;
19     }
20     
21     int sum = u + d;
22     double m = (double)u/sum;
23     if(s) printf("WA");
24     else if(fabs(m-0.5)>0.003) printf("Fail\n");  
25     else if(fabs(m-0.5)<=0.003) fun(u,sum);
26     return 0;
27 }
28 void fun(int u, int sum)
29 {
30     int t = u>sum?u:sum;
31     while(t)
32     {
33         if(u%t==0 && sum%t==0){
34             u /= t;
35             sum /= t;
36             break;
37         }        
38         t--;
39     }
40     printf("%d/%d",u,sum);
41 }

10、特殊要求的字符串

 1 #include<stdio.h>
 2 #include <string.h>
 3 #define N 256
 4 
 5 void sortUp(char *s,int n);
 6 void sortDown(char *s,int n);
 7 int main()
 8 {
 9     char s[N] = "";
10     char t[N] = "";
11     gets(s);
12     /* 1. */
13     int len = strlen(s);
14     int midIndex = len/2;
15     if(len%2)
16         midIndex++;
17     /* 2. */
18     strncpy(t,s,len/2);/* 保存前半部 */
19     sortUp(&s[midIndex],len/2);/* 升序后半部 */
20     strncpy(s,&s[midIndex],len/2);/* 有序后半部复制到前半部 */
21     sortDown(t,len/2);/* 降序前半部 */
22     strncpy(&s[midIndex],t,len/2);/* 有序前半部复制到后半部 */
23     /* 3 */
24     puts(s);
25     return 0;
26 }
27 
28 void sortUp(char *s,int n){
29     char temp[N] = "";
30     for(int i=0; i<n; ++i)    
31         temp[s[i]]++;
32     //升序
33     int index = 0;
34     for(int j=0; j<N; ++j)
35     {
36         while(temp[j])
37         {
38             s[index++] = j;
39             temp[j]--;
40         }
41     }
42     
43 }
44 
45 void sortDown(char *s,int n){
46     char temp[N] = "";
47     for(int i=0; i<n; ++i)    
48         temp[s[i]]++;
49     //降序
50     int index = 0;
51     for(int j=N-1; j>=0; --j)
52     {
53         while(temp[j])
54         {
55             s[index++] = j;
56             temp[j]--;
57         }
58     }    
59 }