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 |