• 算法笔记 心得4


    1,一维数组

    格式:数组类型  数组名[数组大小];
    数组大小必须是整型常量,不能是变量
     
    访问形式:
    数组名称[下标]
    ⚠️;只能访问下表0~size-1
     
    数组没有赋值的部分默认为0;如果数组一开始都没有赋值,就没个元素都可能是一个随机数,而不是默认的0
    如果想把整个元素都赋值初值0,那么只需要吧第一个元素赋值为0,或者只用一个大括号来表示。
    eg. int a[10]={0};
    int a[10]={  };
     
    2,不断的让后一位的结果由前一位或者前若干位计算得来,把这种做法成为递推。
    递推分为顺推和逆推。
     
    3,二维数组
    格式:
    数据类型  数组名[第一维大小][第二维大小]
     
    访问:
    数组名[下标1][下标2]
     
    ⚠️如果数组大小比较大(大约10^6),则需要将其定义在主函数的外面,否则会异常退出。
    因为函数内部申请的是局部变量来自栈系统,允许申请的空间比较小;
    而函数外部申请的全局变量来自于静态存储区,允许申请的空间比较大。
     
    4,对数组的每一个元素赋相同的值
    memset函数:
    格式:
    memset(数组名,值,sizeof(数组名));
    ⚠️加头文件string.h
    只建议初学者使用memeset赋值0或-1,因为它是按字节赋值,即对每个字节赋相同的值
    如果要对数组赋其他数字,使用fill函数()
     
    5,字符串数组
    可以像普通数组一样初始化,
    eg,char str[15]={‘G’,’o’,’o’,’d’,’ ‘,’s’,’t’,’o’,’r’,’y’,’!’};
     
    字符串也可以直接赋字符串初始化(仅限于初始化,程序的其他的位置不允许这样直接赋值整个字符串)
    eg.char str[15]=“Good story!”;
     
    6,字符串的输入输出
    A,scanf、printf
    %s  识别空格作为字符串的结尾,scanf使用%s,后面对数组名是不需要加取地址符&;
    %c  能够识别空格和换行,将其输入。
     
    B,getchar()、putchar()
    getchar和putchar用来输入和输出单个字符
     
    C,gets()、puts()
    使用gets()来输入一行字符串(⚠️gets识别换行符 作为输入,因此在使用完scanf一个整数后,如果要使用puts,要先使用getchar接收整数后面的换行符),并将其存入一维数组(合作和二位数组的一维)中;
    puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。
     
    eg.
    int str2[5][10];
    for(int i=0;i<3;i++){
    gets(str2[i]);
    }
    就是使用for循环把三个字符串分别存入str2[0]、str[1]、str[2]中
     
     
    7,字符串数组的存放方式
    字符串数组每一位都是一个char字符,在一维数组(或是二维数组的第二维)的末尾都有一个空字符,以表示存放字符串的结尾。
     
    空字符在使用gets和scanf输入字符串时会自动添加在输入字符串后面,并占用一个字符位,而puts和printf就是通过识别作为字符串的结尾来输出的。
     
    ⚠️:结束符的ASCII码是0,即空字符NULL,占用一个字符位,因此字符数组的长度一定比实际存储字符的长度至少多一;
    int型数组的末尾不需要加,只有char型数组需要。
    和空格不是同一个东西,空格的ASCII码是32.
     
    ⚠️:如果不使用scanf或puts作为字符串的输入(如getchar),一定要在末尾加””,否则printf和puts输出字符串时,会因为无法识别字符串末尾而输出一大堆乱码。
     
    8,string.h头文件
    strlen();
    格式:
    strlen(字符数组)
    作用:可以得到字符数组中第一个前面的字符的个数
     
    strcmp();
    格式:
    strcmp(字符数组1,字符数组2);
    作用:返回两个字符串大小的比较结果,比较原则是按字典序
    eg、”a”的字典序小于”b”、”aaaa”的字典序小于”aab”
     
    A,如果字符数组1<字符数组2,则返回一个负整数(不同的编译器不同,不一定是-1)
    B,如果字符数组1==字符数组2,则返回0
    C,如果字符数组>字符数组2,则返回一个正整数(不同的编译器不同,不一定是+1)
     
    strcpy();
    格式:
    strcpy(字符数组1,字符数组2);
    作用:strcpy函数把一个字符串赋值给另一个字符串
    ⚠️:把字符串2赋值给字符串2,赋值包括结束符
     
    strcat();
    格式:
    strcat(字符数组1,字符数组2);
    作用:把字符数组2接到字符数组2后面
     
    sscanf();ssprintf();
    ssscanf与ssprintf是处理字符串问题的利器;
    格式:(假设定义一个char数组str[100])
    sscanf(str,”%d”,&n);
    sprintf(str,”%d”,n);
    作用:sscanf的作用是把字符数组str中的内容以”%d”的格式写到n中
    sprintf写法的作用是把n以”%d”的格式写到str字符数组中
     
     
  • 相关阅读:
    LOJ#2245 魔法森林
    洛谷P1173 [NOI2016]网格
    [NOI2018]归程
    宇宙旅行
    hdu 4027 Can you answer these queries?(线段树)
    poj 1661 Help Jimmy(记忆化搜索)
    hdu 1078 FatMouse and Cheese(简单记忆化搜索)
    poj 3616 Milking Time (基础dp)
    hdu 1074 Doing Homework(状压dp)
    codeforces 735C. Tennis Championship(贪心)
  • 原文地址:https://www.cnblogs.com/fanxinglanyu/p/10275985.html
Copyright © 2020-2023  润新知