程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C——字符串練習,字符串練習

C——字符串練習,字符串練習

編輯:關於C語言

C——字符串練習,字符串練習


1.

查找一個字符在字符串1中出現的所有字符位置,

比如:

輸入

asdfwd

d

輸出為

3

6

輸入

hhff

h

輸出為

1

2

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char a[100] = "sgfgeasdefw";
 5     char target ;
 6     scanf("%c",&target);
 7     char *p = a;
 8     while((p=strchr(p, target)))
 9     {
10         printf("%ld\n",p-a+1);
11         p++;
12     }
13 }

2.

比較一個字符串2在字符串1中是否存在,如果存在輸出Y,否則輸出N

比如:

輸入

asdfwd

dfw

輸出為

Y

 輸入

sgfgeasdfw

hhff

輸出為

N

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char a[100] = "sgfgeasdfw";
 5     const char *b = "ge";
 6     //傳入的第二個參數,雖然是一個字符串,但是會自動解析位對應的每一個字符,之後判斷a字符串中出現的第一個位置
 7     //strtok(a, b);
 8     //strstr(const char *,const char *);返回的是子字符串中出現的第一個位置
 9     if(strstr(a, b))
10     {
11         printf("Y");
12     }else{
13         printf("N");
14     }
15 }

 3.

查找一個字符串2在字符串1中出現的次數,

比如:

輸入

asdfwd

d

輸出為

2

輸入

hhff

h

輸出為

2

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char *src = "asfdasdfassdf";
 5     char target[100] = {};
 6     scanf("%s",target);
 7     int cnt = 0;
 8     char *p = src;
 9     while((p=strstr(p, target)))
10     {
11         cnt++;
12         p++;
13     }
14     printf("出現的次數:%d",cnt);
15     return 0;
16 }

4.

給定一個任意字符串,然後將該字符串逆序輸出。

比如:

輸入

asdfwd

輸出為

dwfdsa

1 #include <string.h> 2 char *reverse(char *a) 3 { 4 int len = (int)strlen(a); 5 char b[100] = {0}; 6 for(int i=len-1;i>=0;i--) 7 { 8 b[len-i-1] = a[i]; 9 } 10 char *res = b; 11 return res; 12 } 13 int main(int args,const char *argv[]) 14 { 15 char *a = "afdasfas"; 16 char *res = reverse(a); 17 printf("%s",res); 18 return 0; 19 } View Code

 5.

題目描述:“eeeeeaaaff" 壓縮為 "e5a3f2",請編程實現

這題有一個比較尴尬的地方是,假如字符串是是“abc”,那麼如果化成“a1b1c1”超過了原來字符串的長度,又題目給的是原地,我們假設字符串原長度就是題目給的那麼長,那麼就沒辦法了,所以如果遇到單個字母的後面不加1

1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 5 void condense( char * src_str) 6 { 7 if(src_str==NULL) 8 return ; 9 10 int count=1; 11 int sub_length=1; 12 for(int i=1;i<strlen(src_str);i++) 13 { 14 if(src_str[i]==src_str[i-1]) 15 { 16 count++; 17 } 18 else 19 { 20 if(count==1) 21 { 22 src_str[sub_length++]=src_str[i]; //單個只要賦值 23 } 24 else 25 { 26 src_str[sub_length++]=count+48; //多個要加上數字,+48變成ascii碼 27 src_str[sub_length++]=src_str[i]; 28 count=1; 29 } 30 } 31 } 32 33 if(sub_length<strlen(src_str)) 34 src_str[sub_length]='\0'; 35 36 printf("%s \n",src_str); 37 38 39 } 40 41 int main() 42 { 43 char str[]="abbbdffeeg"; 44 condense(str); 45 getchar(); 46 return 0; 47 } View Code

 6.題目描述:“eeeeeaaaff" 壓縮為 "e5a3f2",並用一個字符串存儲,通過子函數實現,結果用指針函數返回,請編程實現

1 #include <string.h> 2 #include <ctype.h> 3 char *getStringToCompress(char *src) 4 { 5 char compress[100] = {}; 6 int cnt = 0; 7 char *psrc = src; 8 char al[100] = {}; 9 int num[100] = {0}; 10 int i = 0; 11 while(*psrc) 12 { 13 cnt++; 14 if(*psrc != *(psrc+1)) 15 { 16 num[i] = cnt; 17 al[i] = *psrc; 18 cnt = 0; 19 i++; 20 } 21 psrc++; 22 } 23 int len = (int)strlen(al); 24 char buf[100] = ""; 25 //將保持在al和num數組中的元素轉換成字符數組,保持到compress字符數組中 26 for(int h=0;h<len;h++) 27 { 28 if (isalpha(al[h])) { 29 sprintf(buf, "%c", al[h]); //利用sprintf(char *buf,const char *format,argument,...)將字符轉位字符串類型 30 strcat(compress, buf); 31 } 32 if (!isalpha(num[h])) { 33 sprintf(buf, "%d", num[h]); //利用sprintf()函數將數字轉換為 34 strcat(compress, buf); 35 } 36 } 37 char * res = compress; 38 return res; 39 } 40 int main(int args,const char *argv[]) 41 { 42 char src[100] = "eeeeeaaaaaaaaaaaff"; 43 char *compress = getStringToCompress(src); 44 printf("%s",compress); 45 return 0; 46 } View Code

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved