首页 > 技术文章 > 字符串练习题

Lune-Qiu 2017-10-24 20:57 原文

什么是字符串?
以\0结尾的字符数组
只要是字符串操作我们就找字符串结尾

标准的字符串操作函数

char* strcpy_s(char*,const char*)
把第二个参数复制到第一个参数中

char* strncpy(char*,const char*,size_t)
第三个参数说明要复制几个到第一个参数中

char* strcat(char*,const char*)
把第二个参数连接到第一个参数的后面

char* strncat(char*,const char*,size_t)
第三个参数说明要连接几个到第一个参数后面

int strcmp(const char*,const char*)
比较两个字符串是否相等
返回值 1 0 -1

int strncmp(const char*,const char*,size_t)
第三个参数说明要比较几个字符

练习题:

 

1.查找一个字符在另外一个字符串中第一次出现的下标
2.查找一个字符在另外一个字符串中第一次出现的地址
3.查找一个字符串在另外一个字符串中第一次出现的地址  abcccccde ccd

 1 #include <stdio.h>
 2 
 3 int Index(char *str, char a);
 4 char* Address(char *str, char a);
 5 char* Find(char* str1, char* str2);
 6 int main()
 7 {
 8     char *str1 = "abcccde";
 9     char *str2 = "ccd";
10     char a = 'c';
11     printf("%s\n" , Find(str1 , str2)); //一个字符串在另外一个字符串中第一次出现的地址
12     printf("%d\n" , Index(str1 , a));//一个字符在另外一个字符串中第一次出现的下标
13     printf("%d\n" , &str1[Index(str1 , a)]); //一个字符在另外一个字符串中第一次出现的地址
14     printf("%d\n" , Address(str1, a));  //一个字符在另外一个字符串中第一次出现的地址
15 }
16 int Index(char *str, char a)
17 {
18     int index = 0;
19     while(*str != '\0')
20     {
21         if(str[index] == a)
22         {
23             return index;
24         }
25         index++;
26     }
27     return 0;
28 }
29 char* Address(char *str, char a)
30 {
31     while(*str != '\0')
32     {
33         if(*str == a)
34         {
35             return str;
36         }
37         str++;
38     }
39     return NULL;
40 }
41 char* Find(char* str1, char* str2)
42 {
43     char *flag1 = str1;
44     char *flag2 = str2;
45     while(*str1 != '\0')
46     {
47         while(*str1 != *str2)
48         {
49             str1++;
50         }
51         flag1 = str1;
52         while(*str1 == *str2)
53         {
54             str1++;
55             str2++;
56             if(*str2 == '\0')
57             {
58                 return flag1;
59             }
60         }
61         str1 = flag1 +1;
62         str2 = flag2;
63     }
64     return NULL;
65 }
查找

4.统计一个字符串中单词的个数(单词与单词之间是空格分割)"a abc make 89 12 a ma make 12 abc 89"


5.将一个字符串插入到另一个字符串中  "abcd"  "12345" 3

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 void Inter(char *str1 , char *str2, int index);
 5 int main()
 6 {
 7     char str1[100] = "abcd";
 8     char *str2 = "1234";
 9     int index = 2;
10     Inter(str1 , str2, index);
11     printf("%s",str1);
12 }
13 void  Inter(char *str1 , char *str2 , int index)
14 {
15     
16     int len2 = strlen(str2);
17     char *flag = str1 + index; //找到要插入位置
18     while(*str1 != '\0')
19     {
20         str1++;
21     }
22     while(str1 >= flag)    //从后向前,向后移动
23     {
24         *(str1 + len2) = *str1;
25         str1--;
26     }
27     while(len2)  //从标记处开始插入
28     {
29         *flag = *str2;//或者*(flag++) == *(str2++);
30         flag++;
31         str2++;
32         len2--;
33     }
34 }
插入字符串

6.翻转字符串

7.判断是否回文(回文指的是顺读和逆读都一样的字符串)  "abcdcba"

 

 1 #include <stdio.h>
 2 typedef int BOOL;
 3 #define TRUE 1
 4 #define FALSE 0
 5 
 6 char* Reverse(char *str);
 7 int Echo(char *str);
 8 int main()
 9 {
10     char str[10] = "abcba";
11     printf("%s\n",Reverse(str));
12     printf("%d\n",Echo(str));
13 }
14 char* Reverse(char *str)
15 {
16     char *a = str;
17     char *b = str;
18     char c;
19     while(*b != '\0')
20     {
21         b++;
22     }
23     b--;
24     while(a < b)
25     {
26          c = *a;
27          *a = *b;
28          *b = c;
29          a++;
30          b--;
31     }
32     return str;
33 }
34 BOOL Echo(char *str)
35 {
36     char* a = str;
37     while(*a != '\0')
38     {
39         a++;
40     }
41     a--;
42     while(*a == *str)
43     {
44         str++;
45         a--;
46         if(a < str)
47         {
48             return TRUE;
49         }
50     }
51     return FALSE;
52 }
53 //int Echo(char *str)
54 //{
55 //    char *b = Reverse(str);      
56 //    while(*str == *b)
57 //    {
58 //            str++;
59 //            b++;
60 //            if(*str == '\0' && *b =='\0')
61 //                return 1;
62 //    }
63 //        return 0;
64 //}
翻转和回文

 

 

Getstring 函数

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 char* Getstring();
 6 int main()
 7 {
 8     
 9     char* str = Getstring();
10     printf("%s\n",str);
11 
12     return 0;
13 }
14 
15 char* Getstring()
16 {
17     char c;
18     char* str = (char*)malloc(5);
19     int count = 0;
20     char* newStr = NULL;
21     int size = 5;
22     char* bj = str;
23     while((c = getchar()) != '\n')
24     {
25         //1.存储
26         *str = c;
27         str++;
28         count++;
29         //2.看空间是否够用
30         if(count+1 == size)
31         {
32             //1.申请新的空间
33             size += 5;
34             newStr = (char*)malloc(size);
35             //2.让旧空间里面存的东西变成字符串
36             *str = '\0';
37             //3.拷贝到新的空间里
38             strcpy_s(newStr,size,bj);
39             //4.释放旧的空间
40             free(bj);
41             bj = newStr;
42             str = newStr + count;
43 
44         }
45     }
46 
47     *str = '\0';
48     return bj;
49 }
Getstring

 

推荐阅读