zoukankan      html  css  js  c++  java
  • C语言指针与字符串(高阶篇三十二)

      字符串的输入输出

        printfscanf

          格式控制符为%s        /*s为string的意思*/

          与字符型数据处理不同的是,%s后面的变量一定是数组名或是字符指针

          如:

            char *pc=”string!”;

            printf(“%s\n”,pc);

      字符数组与指针

        定义格式:区别

          char *pc=”string!”;

          char s[ ]=”string!”;

     

        赋值:区别

          pc=”string!”;      /*指针可以在运算中赋值*/

          s=”string!”;      /*数组不允许*/

        注意:

          ※字符指针在运算过程中可以用上面的方式赋值,但是用scanfgets这类函数从键盘获取字符串时一定要令其先指向某个数组

            如:scanf(“%s”,pc),运行时会报错,

          ※可以通过移动指针指向串中某个字符,如:

            printf(“%c”,*(pc+2));

            会输出r

          ※双引号也是一种运算符,它会求出一串字符的首地址。上面的”string!”相当于用&求出’s’的地址赋值给pc。

          ※字符数组(字符串)初始化,系统会自动按顺序填充数组元素。平时运行时不能用=号给数组赋值,因为数组名是只读的。

      字符串数组与指针

        所有的字符串都是一维数组,那“字符串数组”肯定是二维数组。

        字符串之间的运算都要通过字符串函数

        程序1

          选择排序法给5个字符串从小到大排序

    // 32-1排序法给5个字符串从小到大排序.c
    
    #include <stdio.h>
    #include <string.h>
    
    void swap(char *s1, char *s2)
    {
        char s3[10];      //字符串交换
        strcpy(s3, s1);
        strcpy(s1, s2);
        strcpy(s2, s3);
    }
    
    
    main()
    {
        char str[5][10];  //定义五个串,不超过十个字符   \0 占一个
    
        printf("请输入五个字符串:\n");
        for (int i = 0; i < 5; i++)
            gets(str[i]);    //输入五个字符串
    
        for (int i = 0; i < 5; i++)
        {
            for (int j =i+1; j < 5; j++)
            {
                if (strcmp(str[i],str[j])>0)   //如果 str[i]大于str[j] 就会返回1,否则就是0;
                {
                    swap(str[i], str[j]);     //交换变量 
                }
            }
        }
    
        //输出字符
        printf("输出排序后的字符串:\n");
        for (int i = 0; i < 5; i++)
        {
            puts(str[i]);
        }
    }

        字符串比较规则:

          比较的时候,从字符串左边开始,依次比较每个字符,直到出现差异、或者其中一个串结束为止。

          比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于C的ASCII码比B大,所以不再继续比较,结果就是后面一个串大。

          再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。

          所以,长度不能直接决定大小,字符串的大小是由左边开始第一个差异字符决定的。

  • 相关阅读:
    数论知识点--以及模板
    【数学+思维】ZZULIOJ 1531: 小L的区间求和
    记忆化搜索模板题---leetcode 1155. 掷骰子的N种方法
    拓扑排序
    ZOJ
    multiset的应用
    HDU
    HDU
    D. Beautiful Array
    HDU
  • 原文地址:https://www.cnblogs.com/httpcc/p/15519999.html
Copyright © 2011-2022 走看看