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
4const 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
11int strlen_(char *str){
// 怎么获取字符串的长度? 不断读取字符,判断末尾 '\0'
int len = 0;
while (*str != '\0')
{
len++;
str++;
}
return len;
}
3.字符串与基本数据类型的转换
atoi(num_str);//str 转 int如果不能转换就是 0 ,后面如果有其他不是数字的就会被剔除 12xxx -> 12atof(num_str);//str 转 float// 如果不能转换返回的是默认值 0.000000strtod(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->atoupper(ch);// a->A
1 |
|
9. 手写字符串的替换
1 | char *substr(const char *str, int start, int end) { |
打印结果:
1 | 00000000006D1840 |