1、查找一个字符
在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数,原型如下所示:
char *strchr(char const *str, int ch);
char *strrchr(char const *str,int ch);
注意:它们的第二个参数是一个整型值。但是,它包含了一个字符值。strchr返回字符第一次出现的位置,strrchr返回字符最后一次出现的位置。找到后函数返回指向该位置的指针,否则返回NULL。
char string[20] = "hello world";
char *ans;
ans = strchr(string,'w');
ans所指向的位置将是string+6。注意这里大小写是有区别的。
2、查找任何几个字符
strpbrk查找任何一组字符第一次在字符串中出现的位置,函数原型如下:
char *strpbrk(char const *str, char const *group);
这个函数返回一个指向str中第1个匹配group中任何一个字符的字符位置,如果未找到就返回NULL指针。
char string[20] = "hello world";
char *ans;
ans = strpbrk(string,'aeiou');
ans指向的位置是string+1,因为这个位置是第2个参数中的字符第一次出现的位置。这个函数也区分大小写。
3、查找一个子串
在一个字符串查找一个子串,可以使用strstr函数,原型如下:
char *strstr(char const *s1, char const *s2);
这个函数在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针。如果s2并没有完整地出现在s1的任何地方,返回NULL指针。如果第2个参数是一个空字符串,函数就返回s1。
注意:标准库中并不存在strrstr或者strrpbrk,但是其很容易实现。下面程序实现strrstr函数。相同的技巧可用于实现strrpbrk。
#include<string.h>
char *my_strrstr(char const *s1,char const *s2)
{
register char *last;
register char *current;;
last = NULL;
/*第2个参数不为空才查找*/
if(*s2 != '\0')
{
current = strstr(s1,s2);
/*每次找到字符串时,让指针指向它的起始位置,然后查找该字符串下一个匹配位置*/
while(current != NULL)
{
last = current;
current = strstr(last+1,s2);
}
}
return last;
}
字符串查找
s.find(s1) //查找s中第一次出现s1的位置,并返回(包括0)
s.rfind(s1) //查找s中最后次出现s1的位置,并返回(包括0)
s.find_first_of(s1) //查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_last_of(s1) //查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.fin_first_not_of(s1) //查找s中第一个不属于s1中的字符的位置,并返回(包括0)
s.fin_last_not_of(s1) //查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
字符串截取
s.substr(pos, n) //截取s中从pos开始(包括0)的n个字符的子串,并返回
s.substr(pos) //截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回
序号 | 函数 & 描述 |
---|
1 | void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 |
2 | int memcmp(const void *str1, const void *str2, size_t n) 把 str1 和 str2 的前 n 个字节进行比较。 |
3 | void *memcpy(void *dest, const void *src, size_t n) 从 src 复制 n 个字符到 dest。 |
4 | void *memmove(void *dest, const void *src, size_t n) 另一个用于从 src 复制 n 个字符到 dest 的函数。 |
5 | void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 |
6 | char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 |
7 | char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。 |
8 | char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。 |
9 | int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。 |
10 | int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节。 |
11 | int strcoll(const char *str1, const char *str2) 把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。 |
12 | char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。 |
13 | char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。 |
14 | size_t strcspn(const char *str1, const char *str2) 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。 |
15 | char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。 |
16 | size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 |
17 | char *strpbrk(const char *str1, const char *str2) 检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。 |
18 | char *strrchr(const char *str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。 |
19 | size_t strspn(const char *str1, const char *str2) 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。 |
20 | char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。 |
21 | char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。 |
#include <stdio.h>
#include <string.h>
int main()
{
const char haystack[20] = "RUNOOB";
const char needle[10] = "NOOB";
char *ret;
ret = strstr(haystack, needle);
printf("子字符串是: %s\n", ret);
return(0);
}
#include <string.h>
#include <stdio.h>
int main () {
char str[80] = "This is - www.runoob.com - website";
const char s[2] = "-";
char *token;
/* 获取第一个子字符串 */
token = strtok(str, s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
printf( "%s\n", token );
token = strtok(NULL, s);
}
return(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)