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 Code5.
題目描述:“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 Code6.題目描述:“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