c《string.h》
字串操作基本常识
char *ptr = “abcd”
//ptr指向字符串常量“abcd”,“abcd”位于常量区,并未给ptr分配空间,如果使用ptr[1]= ‘x’,表示对字符串常量“abcd”进行修改,会出现Program terminated withsignal 11, Segmentation fault。区分指针和字符串。
char s[50] = "ab-cd : ef;gh:i-jkl;mnop;qrs-tu: vwx-y;z";
//为字符串s分配空间(缓冲区),并值拷贝,strlen(s)为41
strcpy(s, "ab-cd : ef;gh:i-jkl;mnop;qrs-tu: vwx-y;z");
//标准字符串的操作末尾会自动添加’\0’结束
一般地,字符串使用规范
规范1
char buf[10] = {'\0'};
strncpy(buf, "abcd",strlen("abcd"));
//strlen(buf) = 4
规范2
char buf[] = “abcd”; //与char *ptr = “abcd”不同,不会为ptr分配空间,但是会为buf分配空间
======================================================================
字符串基本操作
char * strchr ( const char *s, int c );
返回字符串s中首次出现字符c位置的指针,否则返回NULL
扩展:找到出现字符c的下标
char s[] = “abca”;
char *ptr = strchr(s, ‘a’);
index i = ptr - s; //下标
while((ptr = strchr(ptr+1, ‘a’) != NULL){
i= ptr – s;
}
int strncmp(const char *str1, const char*str2, size_t n)
比较字符串str1和str2前面最多的n个字节(‘\0’结束比较),返回(大于、小于、等于)0。
char *strncpy(char *dest, const char *src,size_t n)
将src的前n个字符复制到dest中,不足补齐’\0’
扩展:求出任意子串
char *p = strchr(s, ‘a’);
char buf[10], s[] = “abcd”;
strncpy(buf, s+(p-s), 2);
printf("%d %s\n", strlen(buf),buf); //2, ab
size_t strlen(const char *str)
返回str的非空字符的个数,空字符不计算在内
char *strtok(char *str, const char *delim)
按照delim分割符,如“-+|”,解析字符串str,str必须可变,因为strtok每次返回一个片段时都会将分割符置为’\0’。
扩展:按照delim分割提取子串
char buf[] = “123+456-789”
char *delim = “+|- ”;
char *token = strtok(buf, delim);
while(token != NULL){
token= strtok(NULL, delim);
}