• 标准C语言(9)


    C语言里所有文字信息必须记录在一组连续的字符类型存储区里
    所有文字信息必须以字符''做结尾,这个字符的ASCII码就是0
    符合以上两个特征的内容叫字符串,它们可以用来在程序里记录文字信息.字符串里''字符前面的部分是有效文字信息,所有字符串都可以用字符类型指针表示

    字符串字面值是一种字符串,用一对双引号中间的一组字符表示(例如"abc","#@%#@%"等).编译器在编译的时候自动在字符串字面值的末尾加上''字符.编译器会把字符串字面值替换成第一个字符所在存储区的地址.字符串字面值的内容在程序执行过程中不可以修改,内容一样的字符串字面值其实是同一个,多个并列的字符串字面值会被合并成一个

    字符数组也可以用来存放字符串,只有包含''字符的字符数组里才能记录字符串,可以用字符串字面值对字符数组进行初始化,这个时候计算机会把字符串字面值里的所有字符(包括''字符)都复制到字符数组里,字符数组里的字符串内容可以修改

    printf函数可以把一个字符串里所有有效字符显示在屏幕上,这个时候要使用%s作为占位符

    /*
     * 字符串演示
     * */
    #include <stdio.h>
    int main() {
        char str[] = "abcdef";
        printf("%p
    ", "abc");
        printf("%p
    ", "abc");
        printf("%p
    ", "ab""c");
        printf("%c
    ", *"abc");
        printf("%d
    ", *("abc" + 3));
        //*"abc" = 'x';    错误
        printf("sizeof(str)是%d
    ", sizeof(str));
        printf("%s
    ", "abcdef");
        return 0;
    }

    不可以在程序里用操作符对字符串进行操作,C语言里提供一组标准函数用来操作字符串,为了使用这些标准函数需要包含string.h头文件

    strlen 统计字符串里有效字符个数
    strcat 把两个字符串合并成一个,第一个参数必须是放在字符数组里的字符串,这个函数有可能修改不属于数组的存储区,这可能造成严重错误
    strncat 这个函数功能和strcat类似,但是可以避免strcat的问题
    strcmp 用来比较两个字符串的大小,根据ASCII码比较大小,如果返回值是1表示前一个字符串大,如果返回值是-1表示后一个字符串大,如果返回值是0表示一样大
    strncmp 比较两个字符串的前n个字符
    strcpy 把一个字符串复制到字符数组里,这个函数有可能修改不属于数组的存储区,这可能造成严重错误
    strncpy 功能和strcpy类似,但是可以只拷贝,字符串里前n个字符,有可能不复制''字符
    memset 用来把一个字符数组里前n个存储区的内容设置成某一个字符
    strstr 用来在一个大字符串里查找某个小字符串所在的位置,如果找不到则返回值NULL

    /*
     * 字符串演示
     * */
    #include <stdio.h>
    #include <string.h>
    int main() {
        char str[10] = "abc";
        printf("有效字符个数是%d
    ", strlen(str));
        printf("sizeof(str)是%d
    ", sizeof(str));
        printf("%s
    ", strcat(str, "xyz"));
        printf("%s
    ", str);
        printf("比较结果是%d
    ", strcmp("abc", "abd"));
        printf("%s
    ", strcpy(str, "xyz"));
        printf("%s
    ", str);
        memset(str, 'h', 9);
        printf("%s
    ", str);
        printf("%s
    ", strstr("abcdefghijklmn", "def"));
        return 0;
    }

    以下两个字符串相关的函数不需要包含string.h头文件
      sprintf 按照格式把多个数字合并成一个字符串并记录到字符数组里
      sscanf 按照格式从字符串里获得多个数字并记录到存储区里

    /*
     * 字符串函数演示
     * */
    #include <stdio.h>
    int main() {
        char str[20] = {0};
        char ch = 0;
        int num = 0;
        float fnum = 0.0f;
        //printf("%d %g %c
    ", 45, 6.5f, 't');
        sprintf(str, "%d %g %c
    ", 45, 6.5f, 't');
        printf("%s", str);
        //scanf("%c%d%g", &ch, &num, &fnum);
        sscanf("p 34 6.5", "%c%d%g", &ch, &num, &fnum);
        printf("%d %g %c
    ", num, fnum, ch);
        return 0;
    }

    以下两个函数可以把字符串里的数字转换成数字类型,为了使用这两个函数需要包含stdlib.h头文件

      atoi 用来把字符串开头部分的整数转换成整数类型

      atof 用来把字符串开头部分的浮点数转换成双精度浮点类型

    在scanf标准函数里使用%s做占位符可以把用户在键盘上输入的字符串记录到字符数组里,这种方法可能造成严重错误

    fgets函数也可以从键盘得到一个字符串并记录到字符数组里,这个函数可以避免scanf函数的问题,这个函数需要三个参数
      1.数组名称
      2.数组里存储区个数
      3.用stdin表示键盘

    /*
     * 字符串演示
     * */
    #include <stdio.h>
    #include <string.h>
    int main() {
        char str[10] = {0};
        printf("请输入一个字符串:");
        //scanf("%s", str);
        fgets(str, 10, stdin);
        if (strlen(str) == 9 && str[8] != '
    ') {
            scanf("%*[^
    ]");
            scanf("%*c");
        }
        printf("%s
    ", str);
        printf("请输入一个字符串:");
        //scanf("%s", str);
        fgets(str, 10, stdin);
        printf("%s
    ", str);
        return 0;
    }

    如果输入内容不能充满数组就把用户最后输入的回车当作' '字符也放到数组里.如果输入的内容超过数组里存储区的数量就只会把,输入内容的前面部分放到数组里,后面的部分当作下一个字符串等以后读取.应该在每次使用fgets函数获得字符串以后清理掉输入缓冲区里可能存在的多余数据.应该把清理语句放在一个分支里,分支要保证输入缓冲区里有多余的数据

  • 相关阅读:
    nodejs中处理回调函数的异常
    Web前端开发十日谈
    Android 高仿微信6.0主界面 带你玩转切换图标变色
    Android EventBus源码解析 带你深入理解EventBus
    Android EventBus实战 没听过你就out了
    究竟谁在绑架中国的4G政策?
    Android 实战美女拼图游戏 你能坚持到第几关
    oracle学习
    his使用-重置密码
    oracle中的DDL、DML、DCL
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8290148.html
Copyright © 2020-2023  润新知