优秀的编程知识分享平台

网站首页 > 技术文章 正文

这些字符串处理函数你用过吗(字符串常用操作函数)

nanyue 2024-10-05 18:47:03 技术文章 16 ℃

字符串处理函数

C语言中常用的字符串处理函数有以下几个:

1. strcpy(dest, src):将src字符串复制到dest字符串中。

2. strcat(dest, src):将src字符串追加到dest字符串的末尾。

3. strlen(str):返回字符串str的长度。

4. strcmp(str1, str2):比较两个字符串str1和str2,如果相等返回0,否则返回非0值。

5. strchr(str, c):在字符串str中查找字符c的位置,如果找到则返回指向该字符的指针,否则返回NULL。

6. strrchr(str, c):在字符串str中从后向前查找字符c的位置,如果找到则返回指向该字符的指针,否则返回NULL。

7. strstr(str1, str2):在字符串str1中查找子串str2的位置,如果找到则返回指向该子串的指针,否则返回NULL。


strspn()函数是C语言的一个字符串处理函数,用于计算一个字符串中第一个不包含在另一特定字符串中的字符前的字符数。

函数原型如下:

size_t strspn(const char *str1, const char *str2);

其中,str1是指向要被扫描的字符串,str2是指向包含合法字符的字符串。函数会检查str1中的每一个字符是否都在str2中,如果是,则继续;如果不是,则停止并返回之前已经检查过的字符数。

简单来说,这个函数可以用来找到两个字符串的公共部分的长度,或者说是str1中所有包含在str2中的字符所组成的子串的长度。


strcspn()函数是一个C语言的字符串处理函数,用于计算主字符串中从开头到第一个匹配字符的字符数。

函数原型如下:

size_t strcspn(const char *str1, const char *str2);

其中,str1是指向待处理的字符串,str2是指向要搜索的子字符串的指针。函数会在str1中寻找与str2中任一字符相符的第一个字符,并返回在此之前的所有字符数量。如果str1中不存在str2中的任何字符,则返回整个str1的长度。

注意,这个函数并不检查`str2`中的子字符串是否存在,它只是逐个比较每个字符而已。


10. strpbrk()函数是C语言中的一种字符串处理函数,用于查找某个字符集中的第一个字符出现的位置。

函数原型如下:

char *strpbrk(const char *str1, const char *charset);

其中,str1是指向被查找的字符串,charset是指向包含待查找字符的字符集的指针。

函数会遍历str1中的每一个字符,查看它们是否存在于charset中,当找到第一个存在的字符时,函数就会立即返回指向这个字符的指针。

如果str1中没有任何字符存在于charset中,那么函数就会返回NULL。

11. strrev(str):将字符串str中的字符顺序反转。

12. strtok(str, delim):使用分隔符delim将字符串str分割成多个子串,并返回第一个子串的指针。每次调用此函数时,都会更新内部状态以获取下一个子串。

13. memcpy(dest, src, n):将src的前n个字节复制到dest中。

14. memset(dest, c, n):将dest的前n个字节设置为c。

15. memcmp(str1, str2, n):比较两个内存区域str1和str2的前n个字节,如果相等返回0,否则返回非0值。

16. strdup(str):创建一个新字符串,其内容与str相同,并返回指向新字符串的指针。

17. strndup

字符串函数应用举例

#include <stdio.h>

#include <string.h>


int main() {

char str1[20] = "Hello, World!";

char str2[20];


// 复制字符串

strcpy(str2, str1);

printf("使用strcpy复制字符串: %s

", str2);


// 连接字符串

strcat(str1, " How are you?");

printf("使用strcat连接字符串: %s

", str1);


// 查找子串

char *pos = strchr(str1, 'W');

if (pos != NULL) {

printf("找到子串'W'的位置: %ld

", pos - str1);

} else {

printf("未找到子串'W'

");

}


// 比较字符串

int result = strcmp(str1, str2);

if (result == 0) {

printf("两个字符串相等

");

} else if (result < 0) {

printf("第一个字符串小于第二个字符串

");

} else {

printf("第一个字符串大于第二个字符串

");

}


//在参数 str 所指向的字符串中搜索最后一次出现字符 ch

const char str[] = "https://www.baidu.com";

const char ch = '.';

char *ret;

ret = strrchr(str, ch);

printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);


// 查找子串位置

pos = strstr(str1, "World");

if (pos != NULL) {

printf("找到子串'World'的位置: %ld

", pos - str1);

} else {

printf("未找到子串'World'

");

}


//检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标

int len;
const char str1[] = "ABCDEFG019874";
const char str2[] = "ABCD";


len = strspn(str1, str2);
printf("初始段匹配长度 %d\n", len );


//以str1为参照,比较字符串str2中的字符是否与str中某个字符相等(也就是检索str2中的字符是否在str1中存在),如果第一次发现相等,则停止并返回在str1中这个匹配相等的字符的索引值,失败则返回str1的长度。

char *str1="aaa";

char *str2="bbb";

int inttemp;

inttemp=strcspn(str1,str2);


//根据参数所指的字符串内容自动分配内存,并将字符串复制到该内存中,最后返回该内存的地址

char *str = "hello world";

char *copy_str = strdup(str);

free(copy_str);


//最多只复制n个字节。如果s大于n,则只复制n个字节,并添加一个终止的空字节('\0')

char *dup_str, *string = "abcdefg";

dup_str = strndup(string,3);

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

free(dup_str);


// 计算字符串长度

int len = strlen(str1);

printf("字符串长度: %d

", len);


// 转换大小写

for (int i = 0; i < len; i++) {

if (str1[i] >= 'a' && str1[i] <= 'z') {

str1[i] = str1[i] - 'a' + 'A';

} else if (str1[i] >= 'A' && str1[i] <= 'Z') {

str1[i] = str1[i] - 'A' + 'a';

}

}

printf("转换大小写后的字符串: %s

", str1);


return 0;

}

最近发表
标签列表