字符函数和字符串函数(下)

简介: 字符函数和字符串函数(下)

长度受限制的字符串函数介绍


长度限制也就是说作用于字符串时,可以限制其长度,再任意处停止


strncpy


可以规定拷贝的字符个数,格式如下


char * strncpy ( char * destination, const char * source, size_t num );


说明:


1、拷贝num个字符从源字符串到目标空间。

2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

strncat


可以规定追加的长度,格式如下


char * strncat ( char * destination, const char * source, size_t num );

说明:source所指向的字符串追加到 destination所指向的字符串的结尾,直到 n 字符长度为止。

strncmp


可以选择所需要比较的长度,格式如下


int strncmp ( const char * str1, const char * str2, size_t num );

说明比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

 

字符串查找


strstr

寻找一个字符串中含目标字符串的地址,格式如下


char * strstr ( const char *str1, const char * str2);

说明:

1、函数搜索一个字符串在另一个字符串中的第一次出现。

2、找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;

3、如果未找到所搜索的字符串,则返回NULL

应用如下

1. #include <stdio.h>
2. #include <string.h>
3. main()
4. {
5. char *s="GoldenGlobalView";
6. char *l="lob";
7. char *p;
8.     p=strstr(s,l);
9. if(p)
10. printf("%s",p);
11. else
12. printf("NotFound!");
13. return 0;
14. }


模拟实现strstr


char* my_strstr(char *str1, char* str2)

实现strstr我们我们需要对两个字符串进行比较,那么对于str1,我们每次遍历都需要一个起点,而对于str1与str2进行遍历时,我们也各自需要指针进行遍历,逻辑如下

代码实现如下

1. //char* my_strstr(char *str1, char* str2)
2. //{
3. // char* cp = str1;
4. // char* s1 = cp;
5. // char* s2 = str2;
6. //
7. // if (*str2 == '\0')
8. //   return str1;
9. //
10. //  while (*cp)
11. //  {
12. //    //开始匹配
13. //    s1 = cp;
14. //    s2 = str2;
15. //    while (*s1 && *s2 && *s1 == *s2)
16. //    {
17. //      s1++;
18. //      s2++;
19. //    }
20. //    if (*s2 == '\0')
21. //      return cp;
22. //
23. //    cp++;
24. //  }
25. //
26. //  return NULL;
27. //}


strtok


分解字符串为一组字符串。str为要分解的字符,sep为分隔符字符,搭配头文件#include<string.h>使用,格式如下:

char * strtok ( char * str, const char * sep );

说明:

1、sep参数是个字符串,定义了用作分隔符的字符集合  

2、第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标

3、strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。)

4、strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。

5、strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标

记。

6、如果字符串中不存在更多的标记,则返回 NULL 指针记。

使用如下

1. //int main()
2. //{
3. // char arr[] = "zpengwei@yeah.net@666#777";
4. // char copy[30];
5. // strcpy(copy, arr);
6. //
7. // char sep[] = "@.#";
8. // char* ret = NULL;
9. // char* ret = strtok(copy, sep);
10. //  printf("%s\n", ret);
11. //  
12. //  ret = strtok(NULL, sep);//在同一个字符串中被保存的位置开始,查找下一个标
13. 记。
14. //  printf("%s\n", ret);
15. //
16. //  ret = strtok(NULL, sep);
17. //  printf("%s\n", ret);

上述代码有很大的局限性,而且使用起来不方便,下面代码博主进行了一些优化,代码如下

1. // char arr[] = "zpengwei@yeah.net@666#777";
2. // char copy[30];
3. // strcpy(copy, arr);
4. //
5. // char sep[] = "@.#";
6. // char* ret = NULL;
7. //
8. // for (ret = strtok(copy, sep); ret != NULL; ret=strtok(NULL, sep))//循环进行
9. // {
10. //    printf("%s\n", ret);
11. //  }

这样以来就不用管分割几次了,交给循环来实现就好

注意:需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的str已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。


错误信息报告


库函数在执行时,发生了错位,就会产生错误码,产生的错误码会存放在errno这个变量中,errno时C语言提供的全局变量


strerror


使用sterror可以对错误码进行一个打印,应用代码如下

1. int main()
2. {
3.  int i = 0;
4.  for (i = 0; i < 10; i++)
5.  {
6.    printf("%d: %s\n", i, strerror(i));//
7.  }
8.  return 0;
9. }

运行结果如下

也可将其应用至文件处,用于找出错误,并指出错误原因,简单运用代码如下

1. //int main()
2. //{
3. // FILE* pf = fopen("data.txt", "r");
4. // if (pf == NULL)
5. // {
6. //   printf("fopen: %s\n", strerror(errno));
7. //   perror("fopen");
8. //   //fopen: xxxxxx
9. //   return 1;
10. //  }
11. //  fclose(pf);
12. //  return 0;
13. //}

字符操作


字符分类函数


函数

如果他的参数符合下列条件就返回真

iscntrl

任何控制字符

isspace

空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'

isdigit

十进制数字 0~9

isxdigit

十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F

islower

小写字母a~z

isupper

大写字母A~Z

isalpha

字母a~z或A~Z

isalnum

字母或者数字,a~z,A~Z,0~9

ispunct

标点符号,任何不属于数字或者字母的图形字符(可打印)

isgraph

任何图形字符

isprint

任何可打印字符,包括图形字符和空白字符

字符转换


tolower()


tolower()函数是把字符串都转化为小写字母。格式如下

int tolower ( int c );

使用如下

1. string str= "THIS IS A STRING";
2. for (int i=0; i <str.size(); i++)
3.    {
4.    str[i] = tolower(str[i]);
5.    }

toupper()


toupper()函数是把字符串都转化为大写字母。格式如下


int toupper ( int c );

使用如下

1. string str= "hahahahaha";
2. for (int i=0; i <str.size(); i++)
3.    str[i] = toupper(str[i]);
4.

字符函数与字符串函数至此就讲解完毕了,请关注博主后续对内存函数的讲解。

记得三连哦!!!

相关文章
|
4天前
|
C语言
字符函数和字符串函数
字符函数和字符串函数
52 0
|
9月前
|
存储 C语言
字符串函数介绍&应用(一)
字符串函数介绍&应用
|
5月前
|
C语言
字符函数和字符串函数(下)
字符函数和字符串函数(下)
|
5月前
|
C语言
字符函数和字符串函数(上)
字符函数和字符串函数
|
5月前
详解字符函数和字符串函数-1
详解字符函数和字符串函数
25 0
|
5月前
|
C语言
详解字符函数和字符串函数-2
详解字符函数和字符串函数
28 0
|
7月前
|
编译器 C语言 Python
字符函数和字符串函数(上)
字符函数和字符串函数(上)
30 0
|
7月前
|
C语言 Python
字符函数和字符串函数(下)
字符函数和字符串函数(下)
29 0
字符函数和字符串函数(下)
|
8月前
|
存储 安全
常用的字符函数和字符串函数
常用的字符函数和字符串函数
67 0
|
9月前
字符函数和字符串函数详解(二)
字符函数和字符串函数详解
18 0