zoukankan      html  css  js  c++  java
  • 字符串

    字符数组

    一种用来存储字符串信息的数组。

    printf("%.2lf", 3.1415926);
    

    %lf 是 double 双精度浮点型输出的格式占位符,当我们想要保留小数点后两位的时候,只需要在 % 和 lf 中间加上 .2 即可,2 写在 .(点) 的后面代表小数点后 2 位。

    1. 值和变量

    整型变量,就是存储整型的变量。

    整型变量存储整型值,浮点型变量存储浮点型值。

    2. 字符串和字符数组

    “字符串”就是“值”,而“字符数组”就是存储字符串数据的空间,类比于“变量”的概念。

    字符串长度,就是字符串内容所占字节数量,例如示意图中“hello world”这个字符串内容,长度是 11。

    字符串占用空间,要比“字符串长度”多 1,多出来的这个 1,就是用来存放 字符的。

    3. 字符串操作的利器

    整型数据支持的操作都有什么:加、减、乘、除和取余运算。

    求字符串长度的 strlen 函数,拷贝字符串的 strcpy 函数,比较字符串的 strcmp 函数,连接两个字符串的 strcat 函数。

    字符串操作函数sscanf 函数和 sprintf 函数

    char str[20] = "123.45";
    double num;
    sscanf(str, "%lf", &num);
    

    sscanf 从 str 所存储的字符串中读入一个浮点型数据,然后赋值给 num 变量,这里比传统的 scanf 函数多了一个参数,这个参数代表读取数据的字符串信息。

    sscanf 就是提供了一种将字符串信息转换成其他信息的方式。

    char str[100];
    sprintf(str, "hello world");
    printf("%s", str);
    

    将 “hello world” 字符串,输出到了 str 字符数组中,也就是完成了一个字符数组赋值的过程。

    sprintf 函数就是将原本 printf 函数输出的内容,输出到一个字符数组中存储起来,以方便在程序中的后续操作和使用。

    sscanf 函数与 sprintf 函数对比着看的话,如果说 sscanf 是将字符串转换成整型、浮点型等其他类型的方法,那么 sprintf 就是将其他类型转换成字符串类型的方法。

    #include <stdio.h>
    int main() {
        double num;
        int n;
        char str[100];
        scanf("%lf%d", &num, &n);
        sprintf(str, "%%.%dlf
    ", n); // %% 代表输出一个 %
        printf(str, num);
        return 0;
    }
    

    变量代表了问题中可以被抽象化出来的量,就像以前,我们刻板的认为 printf 的第一个参数只能是一个显示的字符串信息。

    思考题(1):体验利器

    刚刚在上面,介绍了 sprintf 和 sscanf 两个字符串处理的利器工具,那么就请使用 sprintf 函数实现 strlen、strcpy、strcat 函数的功能,注意哦,只允许使用 sprintf 函数,模仿如上三个函数的功能。

    #include <stdio.h>
    char str1[1000], str2[1000];
    int main() {
        scanf("%s%s", str1, str2);
        printf("str1 = %s	str2 = %s
    ", str1, str2);
        sprintf(str1, "%s", str1);   // strlen(str1)
        sprintf(str1, "%s", str2);   // strcpy(str1, str2)
        printf("str1 = %s	str2 = %s
    ", str1, str2);
        sprintf(str1, "%s%s", str1, str2);   // strcat(str1, str2)
        printf("str1 = %s	str2 = %s
    ", str1, str2);
        return 0;
    }
    

    思考题(2):优美的遍历技巧

    介绍完了字符串的相关知识以后,请思考如下问题,如何在不计算字符串长度的情况下,遍历字符串的每一位呢?
    程序设计要求是,读入一个字符串,然后在不计算字符串长度的情况下,输出字符串中的每一个字符,每个字符占一行。其中所谓计算字符串长度的方法,包括但不限于 strlen,sprintf,先行 for 循环遍历统计等。

    #include <stdio.h>
    int main() {
        char str[1000];
        scanf("%s", str);
        for (int i = 0; str[i]; i++) {
            printf("%c
    ", str[i]);
        }
        return 0;
    }
    

    小结

    “值”和“变量”是两个概念,“变量”是存储“值”的地方。

    1. 字符串信息可以存储在字符数组中,字符数组就是“变量”的概念,字符串就是“值”的概念
    2. sscanf 和 sprintf 函数,本质上在做的是以字符串为中间值,做各种数据类型之间的转换。
  • 相关阅读:
    linux系统缓存机制
    信号“未决”与“阻塞”
    异步I/O
    Unix下五种IO模型
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12586435.html
Copyright © 2011-2022 走看看