C语言中 字符串处理函数

1.gets函数

gets(char *s);//参数是一个字符数组
使用gets和scanf(C++中不建议使用scanf就是因为缓冲区警告)都要注意缓冲区溢出的问题
scanf回车和空格都默认输入结束,而gets只认回车//gets在新版本被淘汰了

2.fgets函数

gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,而fgets函数改进了这个问题。

由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

Gets有三个参数,第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin

Fgets在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。Fgets函数是安全的,不存在缓冲区溢出的问题。

Fgets(char *s, size_t len, stdin);//stdin是标准输入设备,也可以另填fopen的指针

char s[100] = { 0 };
fgets(s, sizeof(s), stdin);

3.puts函数

puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’,puts不支持各种转义字符,比如%d,%s都不支持,puts只能简单的直接输出一个字符串,而不能输出char,int,double等其他类型。

    char s[] = "hello world";
    puts(s);

4.fputs函数

fputs是puts的文件操作版本,第一个参数是一个char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写为stdout

Fgets不会自动输出一个\n

char s[] = "hello world";
fputs(s, stdout);

5.strlen 字符串长度

查看字符串有效字符个数

这个库函数需要包含头文件

size_t  strlen(const char * _Str);
char a[100] = "abcdefg123";
int len = strlen(a);

返回不包含字符串结尾’\0’的字符串长度

6.strcat字符串追加

size_t strcat(char * _Str1, const char * _Str2);

将参数_Str2追加到_Str1后尾

存在缓冲区溢出的危险,如果字符串没有足够的空间追加第二个字符串,那么程序就出错了

7.strncat 字符串有限追加

size_t len = sizeof(a)-sizeof(b);
if(len>0)size_t  strncat(char * _Str1, const char * _Str2, size_t len);

8.strcmp 字符串比较

int strcmp(const char * _Str1, const char * _Str2);

比较两个字符串是否相等,相等返回0,不等返回非0

9.strncmp 字符串有限比较

指定比较两个字符串的前几个字符

int strncmp(const char * _Str1, const char * _Str2, size_t n);

n代表指定比较字符串的数量

10strcpy 字符串拷贝

char *strcpy(char * _Str1, const char * _Str2);

将参数_Str2拷贝到参数_Str1中

Strcpy也存在内存溢出的问题

11.strncpy字符串有限拷贝

char *strcpy(char * _Str1, const char * _Str2, size_t n);

n代表有限拷贝。

12.sprintf 格式化字符串

和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

Sprintf使用方法与printf类似,唯一区别是增加了第一个参数,第一个参数是一个char数组

sprintf(str,"%d+%d=%d",a,b,a+b);//第二个参数的内容输入到第一个参数中去

12.1fprintf 按格式输入到文件

比sprintf少了fputs过程

fprintf(FILE *p,"%s",char *n);
fprintf(FILE *p,"%d %d",a1,a2);

用法和printf一样,只是多了第一个参数,参数是打开的文件指针

char a[] = "hello";
fprintf(p,"%s",a);

13Sscanf函数(按格式取)

Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

Sscanf多了第一个参数,char的数组,sscanf会从这个char的数组中读取相关内容。

char str[] = "32+67";
int a,b;
sscanf(str,"%d+%d",&a,&b);
printf("a = %d,b = %d\n",a,b);


输出a = 32 ,b= 67

13.1fscanf函数(从文件中按格式读取)

文件p本身格式!
4+5
5+6

fscanf(p,"%d+%d",&a1,&a2);
printf("a1 = %d,a2 = %d\n",a1,a2);
fscanf(p,"%d+%d",&a1,&a2);//自动下移
printf("a1 = %d,a2 = %d\n",a1,a2);

输出
a1 = 4,a2 = 5
a1 = 5,a2 = 6

14.strchr查找字符

char * strchr(char * _Str, int _Ch);

在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;

15.strstr查找字符串

char * strstr(char * _Str, const char * _SubStr)

在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

16.strtok分割字符串

字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

    char buf[] = "abc@defg@igk";
    char *p = strtok(buf, "@");;
    while (p)
    {
        printf("%s\n", p);
        p = strtok(NULL, "@");
    }

17. atoi转化为int

atoi的功能就是把一个char的数组转化为一个int,需要头文件stdlib.h

char a[] = "123";
char b[] = "34";
int a1;
int b1;
a1 = atoi(a); //atof atol同理 a to int/float/long的意思
b1 = atoi(b);
int c = a1 + b1;
printf("%d\n",c);

18.atof转化为float

把一个小数形式的字符串转化为一个浮点数

19.atol转化为long

将一个字符串转化为long类型

C语言并没有把一个int转化成字符串的函数,所以不要尝试使用itoa这种函数

可以用sprintf将一个int,或者其他类型转化为一个字符串。

Itoa可以在VS编译,但在其他系统下就未知了。

你可能感兴趣的:(C语言中 字符串处理函数)