Linux C 字符串操作

来源:互联网 发布:蜜蜂软件怎么注册 编辑:程序博客网 时间:2024/05/22 12:00

所属头文件:,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

0 0
原创粉丝点击