您的位置:首页 > 运维架构 > Linux

Linux C 字符串操作的基本使用

2016-04-22 15:43 573 查看
http://www.360doc.com/content/12/0309/15/8500224_193018975.shtml

所属头文件:<string.h>

0、获取字符串长度:int strlen(char *s)

int strlen(char *s)
函数说明:此函数用于获取s的长度,不包括'\0'注:切记最好保证s的尾部是'\0',strlen函数读到'\0'会自动停止然后统计字符数

返回值:字符数

1、查找指定的字符:index函数,rindex函数,strchr函数 strrchr(其中index函数和strchr函数基本相同,rindex函数和strchr函数相同)

(1)char *index(const char* s, char c) char *strchr(const char* s, char c)

函数说明:index函数用于查找字符串s中第一个出现c字符的地址,然后将该字符的地址返回.strchr函数与index相似

返回值:若找到指定到字符则返回该字符的地址,否则返回0

举例:

char s[] = "abcdeabcde";

char *sdest = NULL;

sdest = index(s,'d');

printf("sdest: %s\n",sdest);

输出结果:sdest: deabcde

(2)char *rindex(const char* s, char c) char *strrchr(const char* s, char c)

函数说明:类似于index函数,但是他是从字符串开始查找字符c,并返回从字符串尾部开始第一个符合条件的字符的地址(strrchr与rindex相似)

返回值:同index一样

举例:

char s[] = "abcdeabcde";

char *sdest = NULL;

sdest = rindex(s,'d');

printf("sdest: %s\n",sdest);

输出结果:sdest: de

2、查找满足条件字符串中任意一个字符:strpbrk函数

char *strpbrk(const char *s, const char *accept)

函数说明:查找s字符串第一个符合accept字符串中任意一个字符的字符的地址

返回值:符合条件的字符的地址

举例:

char s[] = "abcdefgefgbe";

char t[] = "omgf";

char *d = NULL;

d = strpbrk(s,t);//应该会从s中找到‘f'字符的地址

if(d != 0)

{

printf("原字符串: %s\n",s);

printf("获得到字符串: %s\n",d);

}

输出结果:

原字符串: abcdefgefgbe

获得到字符串: fgefgbe

3、统计字符串中连续包含或不包含指定字符串内容到字符数:strspn函数 ,strcspn函数

(1)size_t strspn(const char *s, const char *accept)

函数说明:从s的开头开始计算连续的字符,这些字符都属于accept中字符,遇到不是accept中的字符则停止,并返回字符个数n,即代表s开始处有连续n个属于accept字符串的字符.

返回值:返回s字符串起始位置开始连续属于accept字符串的字符个数

举例:

char s[] = "abcdefgefgmmmmmbbe";

char t[] = "bcdaefg";

int inumber = 0;

inumber = strspn(s,t);

printf(" %d\n",inumber);

输出结果:10

(2)size_t strcspn(const char *s,const char *reject)

函数说明:与strspn相反,从s的开头开始计算连续不属于reject的字符数,并返回字符个数n,即代表s开头处有n个不属于accept字符串的字符。

返回值:返回s字符串起始位置开始连续不属于accept字符串到字符个数

举例:

char s[] = "abcdefgefgmqmmmmbbe";

char t[] = "mq";

int inumber = 0;

inumber = strcspn(s,t);

printf(" %d\n",inumber);

输出结果:10

4、查找指定字符串:char *strstr(const char *s, const char *need);

函数说明:从s中找到与need匹配到子字符串,并将该子字符串的地址返回

返回值:匹配的子字符串的起始地址

举例:

char s[] = "abcdefgefgmqmmmmbbe";

char t[] = "fge";

char *score = NULL;

score = strstr(s,t);

printf(" %s\n",score);

输出结果:

fgefgmqmmmmbbe

5、字符串分割:char *strtok(char *s, const char *delim)

函数说明:strtok函数将s按照delim字符串中的字符分割成一个个子字符串,对于字符串s,当遇到delim中到字符,则将该字符替换成'\0'然后返回'\0'之前的字符串子串。若继续分割,则将第一个参数设置为NULL,程序会从上一次分割结束的位置('\0'之后)开始继续分割,若已经无法分割则返回NULL

返回值:分割所得到子字符串的地址.,若无法分割则返回NULL

举例:

char s[] = "abc:bcd:ef bg_op fq:yz_dd";

char t[] = ": _";

char *score = NULL;

/*第一次调用*/

if((score = strtok(s,t)) == NULL)

{

printf("failed!\n");

return 0;

}

printf("%s;",score);

/*继续分割,将第一个参数这是为NULL*/

while((score = strtok(NULL,t)))

{

printf("%s;",score);

}

输出结果:

abc;bcd;ef;bg;op;fq;yz;dd;

6、字符串比较:strcmp函数, strncmp函数,strcasecmp函数,strncasecmp函数

(1)int strcmp(const char *s1,const char *s2);

函数说明:s1字符串与s2字符串从开头开始逐字符比较,先用s1的第一个字符的ASCII码的值与s2到第一个字符值到ASCII码值相减,若差值等于0,则继续用s1,s2字符串的第二个字符比较,若不等于0则返回差值。所有字符比较完后差值依然为0,但是其中一个字符串长度较长,如s2比s1多一个字符'a',那么返回差值0-'a'的值

返回值:若两个字符串完全相同则返回0,否则返回字符差值

举例:

char s1[] = "abcdefg";

char s2[] = "abcdefgopq";

char s3[] = "abcdefm";

printf("s1与s2比较:%d\n",strcmp(s1,s2));

printf("s1与s3比较:%d\n",strcmp(s1,s3));

return 1;

输出结果:

s1与s2比较:-111

s1与s3比较:-6

(2) int strncmp(const char *s1,const char *s2,size_t n);

函数说明:原理与strcmp函数一样,只不过多了一个参数来限制比较用于比较的字符的个数不能超过n,如果两个字符串前n个字符完全一样则返回0,相比strcmp,strncmp函数灵活性更强。

返回值:若两个字符串完全相同则返回0,否则返回字符差值

(3)int strcasecmp(char *s1, char *s2)

函数说明:与strcmp相似,只不过比较的时候忽略大小写差异

返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值

(4)int strncasecmp(char *s1, char *s2,size_t n)

函数说明:于strcasecmp函数相比,多了个参数限定比较字符的个数

返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值

7、字符串复制:strcpy函数、strncpy函数、strdup函数

(1)char *strcpy(char *dest, const char *src)

函数说明:将src字符串到内容拷贝到dest指向到字符串中,注:拷贝的长度由src字符串的'\0'空字符的位置决定,因此使用到时候要考虑到src末尾是否有空字符,并且考虑dest字符串的大小,有可能dest无法容纳src导致溢出

返回值:dest字符串的起始位置

举例:

char dest[50];

char src[] = "adfdasfa";

printf("%s",strcpy(dest,src));

输出结果: adfdasfa

(2)char *strncpy(char *dest, const char *src, size_t n)

函数说明:与strcpy用法类似,将src最多前n个字符拷贝到dest,如果src长度小于n则到'\0'为止,相比strcpy,strncpy函数安全性更高,使用更灵活

返回值:dest字符串的起始位置

(3)char *strdup(char *src)

函数说明:会调用malloc函数动态分配一块大小与src一样的内存,然后将src的内容拷贝到该块内存中,并将内存的起始地址返回,这意味着如果我们不再需要这个字符串的副本,我们最好使用free()将它释放。

返回值:复制成功后的字符串的地址,若失败则返回NULL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: