C语言——字符串专题

本文详细介绍了C语言中字符串的定义方式(字面量、字符数组和字符指针),以及字符串的读取和输出(scanf、gets和puts),并对比了sizeof和strlen的区别,最后展示了sprintf函数在字符串拼接、数字转换、格式化输出等方面的应用。
摘要由CSDN通过智能技术生成

1、字符串的定义:

  • 使用字符串字面量:char str[ ]="hello world";
  • 使用字符数组:char str[20]={'h','e','l','l','o','w','o','r','l','d'};
  • 使用字符指针:char *str = "Hello, World"; 

当使用字符串字面量和字符数组的方式定义字符串时,编译器会自动在字符序列的末尾添加'\0'。而使用字符指针定义字符串时,并不会在字符串的末尾添加'\0'。

2、字符串的读取和输出:

  • scanf("%s",str);读取字符串时,遇到空格会停止读入,例如,运行下方代码,当输入为hello world!时,输入的结果为hello,中间的空格和后面的world并没有读到。
        scanf("%s",str);
        printf("%s",str);
    输出结果: 
  • gets(str);读取字符串时,遇到空格不会停止读入,它会读取整行输入,直到遇到换行符后停止读入,自动在输入的字符后面添加一个空字符‘\o’形成字符串。常常和puts()一起使用,用来输出字符串。
        gets(str);
        puts(str);

    输出结果: 

3、sizeof(str)和strlen(str)的区别:

  • sizeof():是求数据类型的大小,比如定义了一个字符数组char str[20],尽管输入的是只有十一个字符的"hello world"字符串,sizeof(str)输出的却是20,而不是11,因为定义的字符数组的大小是20。
  • strlen():是求字符串的长度,比如定义了一个字符数组char str[20],输入的是只有十一个字符的"hello world"字符串,strlen(str)输出的是11,因为字符串的长度就是11。并且字符串中的空格也算一个长度,而字符串结尾的空字符'\o'则不算长度。
        char s1[20]="hello world";
        char s2[20]={'h','e','l','l','o','w','o','r','l','d'};
        char s3[]="hello world";
    
        int l1=strlen(s1);
        int l2=strlen(s2);
        int l3=strlen(s3);
        printf("strlen()计算出的字符串长度:%d %d %d\n",l1,l2,l3);
    
        int c1=sizeof(s1);
        int c2=sizeof(s2);
        int c3=sizeof(s3);
        printf("sizeof()计算出的字符串长度:%d %d %d",c1,c2,c3);

    运行结果如下: 

4、sprintf()函数的应用

sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已, 前者打印到字符串中, 后者则直接在命令行上输出。sprintf 函数是 C 语言中用于将格式化字符串写入字符数组的函数,它的原型如下:

函数声明为 
int sprintf(char *string, char *format [,argument,…]);
参数:
str为要写入的字符串;
format为格式化字符串,与printf()函数相同;
argument为变量。

常用的sprintf() 函数的使用方法有以下五种:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    //1、字符串拼接
    char str1[]="hello ";
    char str2[]="world";
    char str3[50];
    sprintf(str3,"%s %s",str1,str2);
    printf("%s\n",str3); // 输出 "Hello world!"

    //2、数字转字符串
    int num=520;
    char str[50];
    sprintf(str,"%d",num);
    printf("%s\n",str);//输出字符串"520"

    //3、填充字符串
    char str4[10];
    sprintf(str4,"%10s","hello");
    printf("%s\n",str4);//输出字符串"     hello"

    //4、格式化输出
    double num1=1.234567;
    char str5[50];
    sprintf(str5,"格式化后变为 %.3f",num1);
    printf("%s\n",str5);//输出字符串1.234,四舍五入保留三位小数

    //5、将字符串转换成整数
    char str6[]="123456";
    int num2=atoi(str6);
    printf("转换成整数后的值为%d",num2);//输出转化后的数字"123456"

    return 0;
}

代码的运行结果为:

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值