C语言中字符串处理函数
一、puts函数
作用:输出字符串的函数,将一个字符串(以’\0‘结束的字符序列)输出
一般形式:
puts(字符数组的地址)
特点:1、用puts函数输出的字符串中可以包含转义字符,
2、
在输出时将结束标志符'\0'转换成了'\n',即输出完之后直接换行
3、可以是字符数组的首地址,也可以是字符数组元素的地址
4、必须是字符数组
5、不可以格式化输出
二、gets函数
作用:从键盘上接收一个字符串的函数,将一个字符串输入到字符数组中,并得到一个函数值,该函数值就是字符数组的首地址
一般形式:
gets(字符数组的地址)
特点:1、xcode下使用gets时会给出一个警告
2、不安全:当指定的数组长度小于输入的字符时不会提示,会存在越界问题
3、使用gets可以接收空格
测试代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义字符数组
char s[]={'0'};
//输出字符串
printf("请输入一个字符串\n",s);
//接受键盘输入的值
gets(s);
//打印输入的字符串
puts(s);
system("pause");
return 0;
}
测试结果
三、puts、gets函数 putchar、getchar函数和fgets、fputs函数的区别;
1、puts、gets函数用于字符串的输出和输入,使用时会有警告,提示不安全,当输入的字符串长度超出字符数组的长度时会把所有字符串都存到字符数组中去,导致字符串中没有结束符\0,因此不安全;而putchar、getchar函数用于单个字符,
2、他们都可以输出转义字符,
3、putchar、getchar函数后面可以是字符常量、整型常量、字符变量或者整型变量,只要是值在字符的ASCII的范围之内就可以
4、getchar函数的返回值就是输入的字符,而gets函数返回值是字符串的地址
5、fgets函数是文件操作相关的函数,他是安全的,当输入的字符串的长度大于数组的长度,此时fgets会自动的把数组的最后一个元素变成\0存储
6、当输入的字符串长度小于数组的长度时,fgets会自动换行
7、fgets函数的一般形式为:fgets(数组名,数组长度,stdin(标准输入));不能以格式化输入
8、fputs函数不会自动换行,不能进行格式化的输出
四、strcat函数—字符串连接函数
一般形式:strcat(字符数组1,字符数组2)
作用:将字符串2连接到字符串1的后面,结果存放到字符串1当中,函数调用完后得到的是字符数组1的首地址
注意:字符数组1的长度要足够长,否则会出现溢出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "Hei Ma";
char s2[] = "Xun Lian Ying";
//连接字符串
strcat (s1,s2);
//输出字符串
printf("连接之后为:%s\n",s1);
printf("%s\n",s2);
system("pause");
return 0;
}
五、strcpy和strncpy函数—字符串复制函数
一般形式:
strcpy(字符数组1,字符数组2)
作用:将字符数组2复制到字符数组1中去
注意:1、字符数组1必须足够大,能够容纳被复制的字符数组2,
2、字符数组1必须写成数组名形式(如str),字符数组2 可以是字符数组名,也可以是一个字符串常量,例如 strcpy(str,”heima“);
3、复制时是将字符数组2中的字符串和最后的\0一起复制到字符数组的1中,从字符数组1的第一个元素开始覆盖,字符数组1被覆盖完后\0之后的元素是字符数组1中原有的字符
4、不能将一个字符串常量或者字符数组直接给一个字符数组 如:str = ”HeiMa
“; str = str1; 这样的赋值是不合法的错误的
测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "Hei Ma";
char s2[] = "Xun Lian Ying";
//复制字符串
strcpy (s1,s2);
//输出字符串
printf("复制之后为");
//输出字符数组1
puts(s1);
//输出字符数组2
puts(s2);
system("pause");
return 0;
}
测试结果:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "Hei Ma";
//char s2[] = "Xun Lian Ying";
//复制字符串
strcpy (s1,"Hei Ma Xun Lian Ying");
//输出字符串
printf("复制之后为");
//输出字符数组1
puts(s1);
//输出字符数组2
//puts(s2);
system("pause");
return 0;
}
strncpy函数:作用是将字符数组2中的前面n个字符复制到字符数组1中去,复制的字符个数n不应该大于字符数组1中原有的字符个数(不包括\0)
一般形式:
strncpy(字符数组1,字符数组2,n);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "Hei Ma";
char s2[] = "Xun Lian Ying";
//复制字符串
strncpy (s1,s2,2);
//输出字符串
printf("复制之后为");
//输出字符数组1
puts(s1);
//输出字符数组2
puts(s2);
system("pause");
return 0;
}
六、strcmp函数—字符串比较函数
作用:将字符串1和字符串2的自左向右逐个字符按ASCII码值得大小相比较,直到出现不同的字符或遇到'\0'位止
特点:1、如全部字符相同,则认为两个字符串相等
2、若出现不相同的字符,则以第1对不同的字符的比较结果为准
如果字符串1 = 字符串2,则函数值为0
如果字符串1 > 字符串2,则函数值为一个正整数
如果字符串1 < 字符串2,则函数值为一个负整数
3、如果参加比较的两个字符串都由英文字母组成,则在英文字典中位置在后面的为大
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "abcd";
char s2[] = "abcde";
//复制字符串
int x = strcmp (s1,s2);
//输出字符串
printf(" 比较结果为:%d\n",x);
//输出字符数组1
//puts(s1);
//输出字符数组2
//puts(s2);
system("pause");
return 0;
}
int main()
{
//定义字符数组
char s1[] = "abcd";
char s2[] = "abcd";
//复制字符串
int x = strcmp (s1,s2);
//输出字符串
printf(" 比较结果为:%d\n",x);
//输出字符数组1
//puts(s1);
//输出字符数组2
//puts(s2);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "heima";
char s2[] = "Zeima";
//复制字符串
int x = strcmp (s1,s2);
//输出字符串
printf(" 比较结果为:%d\n",x);
//输出字符数组1
//puts(s1);
//输出字符数组2
//puts(s2);
system("pause");
return 0;
}
七、strlwr函数—转换为小写的函数
八、strupr函数—转换为大写的函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//定义字符数组
char s1[] = "HEI MA";
char s2[] = "hei ma ";
//复制字符串
strlwr (s1);
strupr(s2);
//输出字符串
//printf(" 比较结果为:%d\n",s1);
//输出字符数组1
puts(s1);
//输出字符数组2
puts(s2);
system("pause");
return 0;
}