- 字符串是有单个字符组合而成的,字符串的结尾是使用
\0
来表示的,'\0'
表示的含义是一个字符;
#define MAX_SIZE
char *s[MAX_SIZE]="dog";
- 其实上面的字符在进行存储时,是
dog\0
对于字符创来说,支持的操作包括:
- 创建
char s[]="hello";
; 字符串拼接
char *strcat(char *dest,char *src)
,函数的返回值是dest
的指针值,但是首先需要保证的是dest
的地址空间长度是可以容纳拼接之后的字符串的,否则字符串拼接就会出错同时还有一个函数char *strncat(chr *dest,char *src,int size);
;//对于这个函数需要注意的一点是str1的空间需要能够容纳所有的元素; char str1[20]="hello,"; char str2[]="world"; char *newstr=strcat(str1,str2); printf("%s\n",newstr);
字符串比较函数
bool strcmp(char *str1,char *str2);
,函数的返回值是一个bool
值,如果前面的字符串小,返回值小于0
,相等时,返回值为0
,否则返回值大于0
;int retu = strcmp(str1,str2); printf("%d",retu);
字符串复制函数
char *strcpy(char *dest,char *src)
,用于将字符串从src
复制到dest
,同样需要保证dest
有足够的空间来容纳;char str3[11]; strcpy(str3,str2); printf("%s\n",str3);
获取字符串长度的函数:
size_t strlen(char *s)
:返回S
的长度;printf("strlen of newstr %zu\n",strlen(newstr));
用于查找某个字符第一次出现的位置
char *strchr(char *s,char c);
,返回c
在s
中第一次出现的位置,如果没有出现就返回NULL
;newstr=strchr(str1,'l'); printf("the posotion is %s\n",newstr);
用于返回
C
在字符串S
中最后一次出现的位置,char *strrchr(char *s,char c);
,如果没有出现就返回NULL
;用于返回第一个使用某个分隔符分割的串,
char *strtok(char *s,char *delimiters);
;newstr=strtok(str1,"ll"); printf("the str is %s\n",newstr);
用于返回字符串的位置:
char *strstr(char *s,char *pat);
,用于返回pat
第一次出现的位置;newstr = strstr(str1,"ll"); printf("the posotion is %zu\n",length);
在
S
中查找spanset
中子串的最大长度,并且返回这个长度,size_t strspn(char *s,char *spanset);
;size_t length=strspn(str1,"l"); printf("the posotion is %zu\n",length);
查找目标字符串没有出现的最大长度:
size_t *strcspn(char *s,char *spanset)
;size_t length=strspn(str1,"l"); printf("the posotion is %zu\n",length);
在目标字符串中查找
spanset
中的所有字符第一次出现的位置:char *strpbrk(char *s,char *spanset);newstr = strpbrk(str1,"l"); printf("the posotion is %zu\n",length);
- 创建
- 分析一个字符串插入的函数用来加深理解字符串:
- 假设由两个字符串
char a[MAX_SIZE]="AAAAA"
以及char b[MAX_SIZE]="bbbbb"
,需要的是将字符串b
插入到字符串a
的某个位置,这个位置可以试开始位置,也可以是其他的任意位置; - 将字符串
b
要放入字符串a
的位置假定为i
,在进行放入的过程中,需要借助于几个系统函数strcat,strcpy
来完成,这几个函数位于string.h
标准库头文件里面;
- 假设由两个字符串
- 分析放入的过程:
- 实现上面过程的代码片段
char a[MAX_SIZE]="AAAAA";
char b[MAX_SIZE]="bbbbb";
char temp[MAX_SIZE];
strncpy(temp,a,3);
//对于strcat函数来说,函数在赋值字符串时,同时返回的是当前末尾的字符串指针,所以是需要是哟个指针进行接收的;
char *s=strcat(temp,b);
strcat(s,a+3);
printf("%s",temp);
- 上述函数的执行结果
- 对于上面的字符串插入函数没有进行异常的判断和处理,还不是很完善,所以只是处理的一个大致过程;
- 将上面的改编成为一个可以使用的函数的代码过程
void strings(char *dest,char *source,size_t i){
char strings[MAX_SIZE],*temp=string;
if(i>strlen(dest)){ fprintf(stderr,"Position is out of bounds\n"); exit(EXIT_FAILURE); }
if(!strlen(dest)) strcpy(dest,source);
else if(strlen(t)){
strncy(temp,s,i);
strcat(temp,t);
strcat(temp,(s+i));
strcpy(s,temp);
}
}
- 上面的代码借助了中间俺字符串数组空间
temp
,在空间上面是存在浪费的;