• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

C学习-函数:字符串处理函数 puts gets strcat strcpy strcmp ...

gets(字符数组):字符串输入函数

函数功能:终端读入字符串(包括空格符)到字符数组直到遇到一个换行符为止。换行符不作为串的内容,系统自动在串后加‘\0’

返回值:字符数组首地址

gets( )函数和使用%s格式的scanf( )函数区别

  • 都是从键盘接受字符串

  • 对于scanf( )函数,输入时“回车”或“空格都是字符串结束标志

  • 对于gets( )函数,只有 “回车”字符串结束标志,“空格”则是字符串的一部分

gets() puts() 例子:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char str[10];
    printf("请输入一个字符串:");
    gets(str);
    printf("你输入的字符串是:");
    puts(str);
    
    scanf("%d", &waitag);
    return 0;
}

结果

请输入一个字符串:he ni   //gets 空格也是有效字符哦,scanf 的空格是结束标志
你输入的字符串是:he ni 
                         //puts 输出是有换行的

puts(字符数组):字符串输出函数

函数功能:从字符数组的首地址开始,依次输出内存中的字符,遇到第一个‘\0’结束输出,并自动输出一个换行符

返回值:无。

puts( )函数和使用%s格式的printf( )函数区别

  • printf() 需要加 \n才能换行,puts 直接换行;

  • printf()可以加一些说明性文字,而且puts不能;如: printf("输入字符串为:%s\n", st);  而 puts(st);

strcat(字符数组1,字符数组2); 字符串连接函数

函数功能:字符数组2中的字符串追加字符数组1中的字符串后面

返回值:字符数组1首地址

说明:

  • #include <string.h> 需要头文件,不是标准函数

  • 字符数组1长度要足够大,字符串2要追加到他里面。

  • 连接前两个字符串的后面都有一个’\0’,连接时将字符串1后面的’\0’取消,只在新串最后保留一个’\0’。

  • 字符数组2追加到字符数组1,没有新生成字符串数组

例子:

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char str[10] = {"CH"}, str2[] = "woqu";  // 注意 str 的长度 一定要能容纳 str2
    strcat(str, str2);
    printf("str 为:%10s\nstr2为:%10s", str, str2);
    
    scanf("%d", &waitag);
    return 0;
}

结果为

str 为:    CHwoqu
str2为:      woqu

strcpy(字符数组1,字符串2); 字符串拷贝函数

函数功能:将字符串2拷贝到字符数组1中去。如果字符数组1不为空,那么字符数组2覆盖它

返回值:字符数组1的首地址。

注意:

  • 字符数组1长度要足够大,以保证能装入拷贝后的字符串。

  • "字符数组1"必须写成数组名形式(如st),“字符串2”可以是字符串常量("china")或已赋值的字符数组名。

  • 拷贝时连同字符串后面的'\0'一起拷贝到字符数组1中。

  • 不能用赋值语句一个字符串常量字符数组直接赋给一个字符数组

例如:

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char str[10] = {"Chinao"}, str2[] = "woqu";   // str 有值,拷贝 后,会被覆盖
    strcpy(str, str2);
    printf("str 为:%6s\nstr2为:%6s", str, str2);
    
    scanf("%d", &waitag);
    return 0;
}

结果

str 为:  woqu
str2为:  woqu

有 char s1[10],s2[ ]={"China"};

strcpy(s1,s2); 或者 strcpy(s1,"China");  //作用相同。

s1={“China”}; 或 s1=s2;则是不合法的。

strcmp(字符串1,字符串2):字符串比较函数

其中,字符串1、2为字符串常量或已赋值的字符数组名。

用法:

  •     strcmp(s1,s2);

  •     strcmp("China","Japan");

  •     strcmp(s1,"China");

函数功能:按照ASCII码顺序比较两个字符串,比较结果由函数值带回。

返回值:

  • 字符串1=字符串2,函数值为0。

  • 字符串1>字符串2,函数值为一正整数(1)。可理解为 字符串1 包含 字符串2

  • 字符串1<字符串2,函数值为一负整数(-1)。可理解为 字符串1 包含于 字符串2

字符串比较的方法是:依次对两个字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时即由这两个字符决定所在串的大小(字符大小的依据是其ASCII值)。

例子:

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char s1[] = {"China"}, s2[] = {"China"}, s3[] = "Chi", s4[10] = "Chinaaa", s5[] = "Chinz";;
    printf("s1和s2比较返回值=%3d\n", strcmp(s1, s2)); 
    printf("s1和s3比较返回值=%3d\n", strcmp(s1, s3));
    printf("s1和s4比较返回值=%3d\n", strcmp(s1, s4));
    printf("s1和s5比较返回值=%3d\n", strcmp(s1, s5));
    
    scanf("%d", &waitag);
    return 0;
}

结果

s1和s2比较返回值=  0   // s1=s2  --> 0
s1和s3比较返回值=  1   // s1包含s3:s1 > s3 -->  1
s1和s4比较返回值= -1   // s1包含于s4: s1 < s4  --> -1
s1和s5比较返回值= -1   // 前4为相等,比第五位ASCII值:s1(a) < s4(z)  --> -1

注意: 对两个字符串比较,不能用比较运算符

strlen(字符数组):求字符串实际长度函数

函数功能:求字符串的实际长度,不是数组的长度(sizeof测的是数组的长度),不包括’\0’在内。

返回值:字符串的实际长度。

例如:

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int waitag;
    
    char str[10] = {"China"};
    printf("字符串长度为:%d\n字符数组长度为:%d", strlen(str), sizeof(str));
    
    scanf("%d", &waitag);
    return 0;
}

输出

字符串长度为:5
字符数组长度为:10

另外,strlen("China")也是合法的用法。

strlwr(字符串):字符串大写转小写函数

函数功能:将字符串中所有大写字母转换成小写字母。

返回值:字符串的首地址。

strupr(字符串):字符串小写转大写函数

函数功能:将字符串中所有小写字母转换成大写字母。

返回值:字符串的首地址。


0
0
下一篇:C学习-基础:函数

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。