字符串复健(c语言)

发布时间 2023-11-07 23:33:03作者: 刘倩_网安2211

目录


字符串的声明和初始化

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组

声明和初始化一个abc字符串:
char site[4] = {'a', 'b', 'c', '\0'};
简化:
char site[] = "abc";


字符串的内存表示

因此,

  1. \0 是用于标记字符串的结束
  2. 由于在数组的末尾存储了空字符 \0字符数组的大小比实际存储的字符数多一个
  3. 字符串char site[]="abc"site表示字符串第一个字符'a'的地址

字符串的输入输出

输入

1.scanf("%s",a(地址),n)=>stdio.h
n表示至多读取n-1个字符,即n表示输入的字符串的最大长度(包括\0)
遇到空格等空字符会返回,不读取空格等空字符
1.1scanf("%[^o]",a(地址),sizeof(a))=>stdio.h
%[^o]使输入遇到o字符再返回,不读取o字符
2.gets(s)=>stdio.h
从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。
gets()函数读取空格,不读取换行符\n,它会把换行符替换成空字符\0,作为c语言字符串结束的标志

输出

1.printf("%s",a(变量名))=>stdio.h
输出字符串a
2.puts=>stdio.h
用于显示字符串,并自动在字符串后面添加一个换行标志\n

字符串相关函数

PS:若无特殊说明,函数返回值一般为int型。

1.n=strlen(s)=>string.h
得到字符串s的长度不包含'\0',返回给n;
2.long int n=strtol(s,&ptr,base)=>stdlib.h
把指针s所指向的字符串根据给定的 base(指s中的数值的进制) 转换为一个长整数(10进制,类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
&ptr是对类型为 char* 的对象的引用,其值由函数设置为s中数值后的下一个字符
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char s[30] = "2030300 This is test";
   char *ptr;
   long ret;

   ret = strtol(s, &ptr, 10);
   printf("数字(无符号长整数)是 %ld\n", ret);
   printf("字符串部分是 |%s|", ptr);

   return(0);
}

运行结果:

3.strcpy(a,b)=>string.h
把字符串b复制给a
4.n=strcmp(a,b)=>string.h
判断字符串a和b的大小,按字符串长度和字典顺序
if(a<b),n<0;if(a==b),n==0;if(a>b),n>0.
5.strcat(a,b)=>string.h
把b字符串接到a的后面,a要足够大

6.(指针)p=strchr(a,c)=>string.h
返回字符串a中字符c第一次**出现的地址

7.(指针)p=strrchr(a,c)=>string.h
返回字符串a中字符c最后出现一次的地址

8.(指针)p=strstr(a,b)=>string.h
返回字符串a中第一次出现子字符串b的地址


总结

c语言中的字符串由一个或多个字符组成,以空字符结尾,但字符串长度不包括空字符。
字符串常常用字符数组char a[n]和指针char *p=a来表示。
对字符串操作时要注意数组长度足够大,否则会导致数组越界。