喜迎
春节

关于字符串


0.注意转义字符 \开头的,如果是转义字符,则整体转义字符当做一个字符

1.字符串类型的定义

c语言中没有想java那样有String

所以我们用char类型来定义

2.字符串的结束位置

为了确定字符串在内存的结束位置,会在结尾加上反斜杠0 \0

2.1用字符定义字符串

 char s[3] = {'l', 'j', 'h'};
    printf("%s", s);
char s[4] = {'l', 'j', 'h','\0'};
// 字符串没有加反斜杠0,输出结果有异常 ljh?0

//写了结束符,就不需要写数组的大小,会自动的帮你计算
char s[] = {'l', 'j', 'h','\0'};

image-20230323100719396

2.2用数组定义字符串

char s[] = {"hello,world"} ; // 这样也不用写结束符号,反斜杠0。

image-20230323101707495

3.获取字符串的长度

3.1 strlen()

根据上面的例子可以看出,strlen遍历字符串的长度,是字符串的实际长度,遇到 \0 会停止遍历,即是第一个元素到\0之间元素的个数,不包括 \0

3.2 sizeof()

sizeof() 求的是存储该字符串的变量占用的空间大小,因而一定会包括 \0, 反斜杠0后面的元素也会计算进去。

如果是”sab\0s”这种用sizeof才对。

一般使用strlen()

4.拷贝字符串

4.1 strcpy(strcpy 是依据 \0作为结束判断的

strcpy(str1,str2)

str1 :是目标数组,

str2:是源数组,

注意: 保证str1有足够的空间存放str2,

char str1[] = "Orginal String";
  char str2[] = "New String";  // 字符串后面都是默认有\0结尾的。

4.2 strncpy(用来复制字符串的前n个字符,,停止使用该函数)

strncpy(str1,str2,size)

目标的字符串,源字符串,复制前几个字符

与strcpy不同,strncpy不会依据\0作为结束判断

5.拼接追加字符串

5.1 strcat (用于拼接字符串)

strcat(str1,str2) 将str2拼接到str1后面,str2不变

strcat 的数据类型是 char* 即指向char 的指针

strcat 无法拼接自身的字符串:在第一次循环的时候就自身的‘\0’就已经被第一个元素覆盖了,导致后面找不到’\0’所以无法退出循环,进入了死循环。

可以看到找不到 \0 没法退出

5.2 strncat

如果想要拼接自身的字符串,无法使用strcat,这时可以使用strncat

char arr1[20] = "abcdefg";
int sz = strlen(arr1);   // 这里的这个长度是不包括 \0的,所以可以用这个方法来追加自身的字符串
strncat(arr1,arr1,sz);  
puts(arr1);

5.3 总结

对于数组的空间如果要追加或者改变的话,就要提前赋予一定的空间大小。以及对于strcat和strncat的搭配运用

6.比较字符串

strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串

6.1 strcmp

C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1 > str2,则返回正数;
若str1< str2,则返回负数。

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。

strcmp(“abcd”,”abcd”)的返回值是 0; 一般的小写的字符返回的是正负1

strcmp(“abcd”,”dcba”)的返回值是 -1;
strcmp(“dcba”,”abcd”)的返回值是 1;

还有一种情况:大写的字符返回的是正负2
strcmp(“A”,”C”)的返回值是 -2;
strcmp(“C”,”A”)的返回值是 2;
这个确切的数值是依赖不同的c的实现

6.2 strncmp

strncmp函数是指定比较size个字符。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则依次比较str1和str2的前n位

str1=”ABCDHG”,str2=”ABCDEF”
strncmp(str1,str2,4)的返回值是 0;
strncmp(str1,str2,5)的返回值是 1;


文章作者: ljhaa
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ljhaa !
评 论
 上一篇
char的细节
char的细节
什么是ascii码 int main() { char c = 'a' ; printf("%d",c) ; // 97 char b = "a" ; // 这是错误的,因为双引号会默认添加\0字符
2023-04-18
下一篇 
面向对象(下)
面向对象(下)
01、关键字:static1.1、static 的使用当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过 new 关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。 我们有时
2023-04-18
  目录