zoukankan      html  css  js  c++  java
  • 2_C语言中的数据类型 (十)数组

    1          字符串与字符数组

    1.1       字符数组定义

    char array[100];

    1.2       字符数组初始化

    char array[100] = {'a', 'b', 'c','d'};

    char array[100] = "abcd";

    char array[100] = { 0 };

    char array[] = "abcd";

    1.3       字符数组使用

    1.4       随机数产生函数rand与srand

    头文件stdlib.h

    Rand是伪随机数产生器,每次调用rand产生的随机数是一样的

    如果调用rand之前先调用srand就出现任意的随机数

    只要能保证每次调用srand函数的时候,参数的值是不同的,那么rand函数就一定会产生不同的随机数

       #include <time.h>

    int t = (int)time(NULL);

       srand(t);

       for (int i = 0; i < 10; i++)

       {

          printf("%d ", rand());

       }

     

     

     

    1.5       用scanf输入字符串

       char s[10] = { 0 };

       scanf("%s", s);//"%s"的作用就是输入一个字符串的,scanf是以回车键作为输入完成标示的,但回车键本身并不会作为字符串的一部分

       //如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃

       int i;

       for (i = 0; i < 10; i++)

       {

          printf("%d ", s[i]);

       }

       printf("---------------------------------- ");

       printf("%s ", s);

       return 0;

    1.6       字符串的结束标志

    Scanf将回车,空格都认为是字符串输入结束标志,

    1.7       字符串处理函数

    1.7.1          gets

       char s[100] = { 0 };

       gets(s);//gets认为回车的输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串

       //gets和scanf一样存在缓冲区溢出的问题

     

       int i;

       for (i = 0; i < 10; i++)

       {

          printf("%d ", s[i]);

       }

       printf("---------------------------------- ");

       printf("%s ", s);

    Gets不能用类似“%s”或者“%d”之类的字符转义,只能接受字符串的输入

    1.7.2          fgets函数

    gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。

    由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

        char s[100] = { 0 };

        fgets(s, sizeof(s), stdin);

    1.7.3          puts函数

    puts函数打印字符串,与printf不同,puts会在最后自动添加一个’ ’

        char s[] = "hello world";

        puts(s);

    1.7.4          fputs函数

    fputs是puts的文件操作版本,

        char s[] = "hello world";

        fputs(s, stdout);

    1.7.5          strlen,字符串长度

    size_t  strlen(const char * _Str);

    返回不包含字符串结尾’’的字符串长度

       char s[100] = "hello world";

       int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0)

       printf("len = %d ", len);

       return 0;

    1.7.6          strcat,字符串追加

    size_t  strcat(char * _Str1, const char * _Str2);

    将参数_Str2追加到_Str1后尾

       char s[1024] = "hello world";

       int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0)

       printf("len = %d ", len);

       char s1[100] = "abc123456789";

       strcat(s, s1);//将两个字符串合并,结果放入第一个参数里面,strcat也存在缓冲区溢出的问题

       printf("%s ", s);

    1.7.7          strncat,字符串有限追加

    size_t  strncat(char * _Str1, const char * _Str2, size_t len);

    1.7.8          strcmp,字符串比较

    int strcmp(const char * _Str1, const char * _Str2);

    比较两个字符串是否相等,相等返回0,不等返回非0

    1.7.9          strncmp,字符串有限比较

    1.7.10      strcpy字符串拷贝

    char *strcpy(char * _Str1, const char * _Str2);

    将参数_Str2拷贝到参数_Str1中

    1.7.11      strncpy字符串有限拷贝

    1.7.12      sprintf,格式化字符串

    和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

    1.7.13      Sscanf函数

    Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

    1.7.14      strchr查找字符

    char * strchr(char * _Str, int _Ch);

    在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;

    1.7.15      strstr查找子串

    char * strstr(char * _Str, const char * _SubStr)

    在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

     

    1.7.16      strtok分割字符串

    字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

       char buf[] = "abc@defg@igk";

       char *p = strtok(buf, "@");

       while (p)

       {

          printf("%s ", p);

          p = strtok(NULL, "@");

       }

    1.7.17      atoi转化为int

    需要包含头文件stdlib.h

    1.7.18      atof转化为float

    1.7.19      atol转化为long

    #include <stdio.h>
    
    int main01()
    {
        //char array[100] = {'a', 'b', 'c','d'};
        //char array[100] = "abcd";
        //char array[100] = { 0 };
        char array[] = "hello world";
        //array[0] = 'a';
        //array[4] = 0
        printf("%d
    ", sizeof(array));
    
    
        int i;
        int j;
        for (i = 0; i < (sizeof(array)-1); i++)
        {
            for (j = 1; j < ((sizeof(array)-1) - i);j++)
            {
                if (array[j - 1] > array[j])
                {
                    char tmp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = tmp;
                }
            }
        }
    
        printf("%s
    ", array);
        return 0;
    }
    
    int main()//字符串逆置
    {
        char str[100] = "你好世界";
        int i = 0;
        while (str[i++]);//求字符串有多长
    
        int min = 0;
        int max = i - 2;
        while (min < max)
        {
            char tmp = str[min];
            str[min] = str[max];
            str[max] = tmp;
            min++;
            max--;
        }
        printf("%s
    ", str);
        return 0;
    }

    资料来源:传智播客  仅供学习研究

  • 相关阅读:
    List--使用List作为堆栈和队列
    Range的范围
    异常处理
    关于打印输出的一些方法
    关于set的unordered特性
    面向对象
    函数
    Linux中命令备份mysql形成文件
    局域网内Linux下开启ftp服务的“曲折路”和命令复习
    linux下的apache服务自启动的几种方式
  • 原文地址:https://www.cnblogs.com/wuchuanying/p/6375783.html
Copyright © 2011-2022 走看看