什么是字符串?
以\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 -1int strncmp(const char*,const char*,size_t)
第三个参数说明要比较几个字符练习题:
1.查找一个字符在另外一个字符串中第一次出现的下标2.查找一个字符在另外一个字符串中第一次出现的地址3.查找一个字符串在另外一个字符串中第一次出现的地址 abcccccde ccd
1 #include2 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 #include2 #include 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 #include2 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 #include2 #include 3 #include 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 }