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比较,比较三个字符后第一个串结束,所以就是后面一个串大。

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

原文地址:https://www.cnblogs.com/httpcc/p/15519999.html