1.字符串定义
字符串以 \0 结尾,动态开辟内存的时候也需要多考虑一位
定义方式有两种:
- char str[] = {'E','a','s','t','r','i','s','e','\0'};: 可以修改
- const char *str1 = "Eastrise";:不能修改,字符串常量存放再全局的const内存区
| 1 | int main(){ | 
2.字符串长度获取
- strlen(name)
- 通过sizeof 进行计算(不好使),不对 - 1 
 2
 3
 4- const char str[] = {'E','a','s','t','r','i','s','e','\0','i','s'}; 
 
 // 怎么获取长度?有一种方式计算(不好使)
 printf("length is %d",sizeof(str)/sizeof(char)); // 打印出来 11,实际结果应该是 8
- 写一个方法读取字符串的长度 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11- int strlen_(char *str){ 
 // 怎么获取字符串的长度? 不断读取字符,判断末尾 '\0'
 int len = 0;
 while (*str != '\0')
 {
 len++;
 str++;
 }
 return len;
 }
3.字符串与基本数据类型的转换
- atoi(num_str);//- str 转 int如果不能转换就是 0 ,后面如果有其他不是数字的就会被剔除 12xxx -> 12
- atof(num_str);//- str 转 float// 如果不能转换返回的是默认值 0.000000
- strtod(num_str, NULL);//- str 转 double// 如果不能转换返回的是默认值 0.000000
| 1 | int main(){ | 
打印结果:
| 1 | number1 is 12 | 
4.字符串的比较
- int rc = strcmp(str1, str2);//- 区分大小写比较,rc == 0代表相等,rc > 0 str1 比 str2 大
- int rc = strcmpi(str1, str2);//- 不区分大小写比较,rc == 0代表相等,反之不相等
- int rc = strncmp(str1, str2,7);//- 区分大小写比较, count 代表的是比较字符串前几个是否相等
- int rc = strnicmp(str1, str2,7);//- 不区分大小写比较, count 代表的是比较字符串前几个是否相等
| 1 | int main(){ | 
5.字符串查找,包含
- char* pos = strstr(str, substr);// 返回的是- 字符串第一次出现的位置(位置指针), 如果没有找到返回的是空- 获取位置: - int position = pos - str;
- char* pos = strchr(name,'n');// 返回的是- 字符第一次出现的位置(位置指针), 如果没有找到返回的是空
| 1 | int main() { | 
打印结果:
| 1 | Eastrise | 
6.字符串复制和拼接
- strcpy(dst, src);// 复制
- strcat(dst,src);// 拼接
| 1 | int main(){ | 
打印结果:
| 1 | eastrise | 
7.手写字符串截取
| 1 | // 截取 | 
打印结果:
| 1 | 0000000000B61440 | 
8.手写字符串小写转换
字符大小写转换
- tolower(ch);// A->a
- toupper(ch);// a->A
| 1 | 
 | 
9. 手写字符串的替换
| 1 | char *substr(const char *str, int start, int end) { | 
打印结果:
| 1 | 00000000006D1840 | 
 
        