字符串
字符串:C/C++中没有专门处理字符串的变量,一般都用数组存放。字符串以 ’\0’ 作为结束符。
1.其他类型转字符串:C语言提供了几个标准库函数,可以将任意类型,如下所示:
itoa():将整形转换为字符串
ltoa():将长整型转换为字符串
ultoa():将无符号长整型转换为字符串
也可以用sprintf将数字转换为字符串,其比上面库函数转换效率低
2.字符串转为其他类型:
atoi():将字符串转换为整型值
atol():将字符串转换为长整型值
strtoul():将字符串转换为无符号长整型值
3.常用的字符串处理函数:
字符串输出函数 puts() 字符串输出函数 gets()
字符串连接函数 strcat() 字符串复制函数 strcpy()
字符串比较函数 strcmp() 测字符串长度函数 strlen()
字符串子串比较函数 strstr()
4. strcpy与memcpy的区别(可分3类):
1》复制的内容不同;strcpy只能复制字符串,而memcpy可以是任意的内容(数组,结构体、类等)
2》复制的方法不同;strcpy不指定长度,遇到字符串结束符 '\0' 就结束,但memcpy由第三个参数决定
3》用途不同;复制字符串一般用strcpy,其他数据类型时,一般用memcpy
5.编写函数实现字符串库函数功能
1.编写实现 strcpy 函数功能
1 char *strcpy(char *dest, const char *src) 2 { 3 char *tmp = dest; 4 5 while ((*dest++ = *src++) != '\0') 6 {} 7 return tmp; 8 }
2.编写实现 memcpy 函数功能
1 void *memcpy(void *dest, const void *src, size_t num) 2 { 3 int i; 4 char *d = (char *)dest, *s = (char *)src; 5 6 for (i = 0; i < num; i++) 7 { 8 d[i] = s[i]; 9 } 10 return dest; 11 }
3.编写实现 strlen 函数功能
1 size_t strlen(const char *str) 2 { 3 const char *tempstr= str; 4 5 while (*tempstr!= '\0') 6 tempstr++; 7 return tempstr- str; 8 }
4.编写实现 strcmp 函数功能
1 int strcmp(const char *cs, const char *ct) 2 { 3 unsigned char c1, c2; 4 while (1) 5 { 6 c1 = *cs++; 7 c2 = *ct++; 8 if (c1 != c2) 9 return c1 < c2 ? -1 : 1; 10 if (!c1) 11 break; 12 } 13 return 0; 14 }
5.字符串反转函数
1 char* strrev1(const char *str) 2 { 3 int len = strlen(str); 4 char *tmp = new char[len + 1]; 5 6 strcpy(tmp, str); 7 for(int i = 0; i < len / 2; ++i) 8 { 9 char c = tmp[i]; 10 tmp[i] = tmp[len - i - 1]; 11 tmp[len - i - 1] = c; 12 } 13 return tmp; 14 }
6.字符串删除函数
1 char* deleteChar(char *str, char c) 2 { 3 char *head = NULL; 4 char *p = NULL; 5 6 if(str = NULL) 7 { 8 return NULL; 9 } 10 head = p = str; 11 while(*p++) 12 { 13 if(*p != c) 14 { 15 *str++ = *p; 16 } 17 } 18 *str = '\0'; 19 return head; 20 }
7.编程实现 strcat 函数功能
1 char *strcat(char *dest, const char *src) 2 { 3 char *tmp = dest; 4 5 while (*dest) 6 dest++; 7 while ((*dest++ = *src++) != '\0'); 8 return tmp; 9 }