zoukankan      html  css  js  c++  java
  • 算法竞赛与入门经典 第 3 章笔记

    提示 3-4 比较大的数组应尽量声明在 main 函数外,否则程序可能无法运行。

    数组不能够进行赋值操作,如果声明的是 “int a[maxn], b[maxn]”,是不能赋值 b = a 的。如果要从数组 a 复制 k 个元素到数组 b,可以这样做:memcpy(b, a, sizeof(int) * k)。如果数组 a 和 b 都是浮点型的,复制时哟啊写成 “memcpy(b, a, sizeof(double) * k)”。另外,使用 memcpy 函数要包含头文件 string.h。如果需要把数组 a 全部复制到数组 b 中,那么,可以更简单一点:memcpyp(b, a, sizeof(a))。

    C 语言中的字符型用关键字 char 表示,它实际存储的是字符的 ASCII 码。字符常量可以用单引号法表示。在语法上可以把字符当作 int 型使用。

    scanf("%s", s),它会读入一个不含空格、TAB 和回车符的字符串,存入字符数组 s。注意,不是 "scanf("%s", &s)",s 前面没有 "&" 符号。在 "scanf("%s", s)" 中,不要在 s 前面加上 "&" 符号。如果是字符串数组 char s[maxn][maxl],可以用 "scanf("%d", s[i])" 读取第 i 个字符串。注意,"scanf("%s", s)" 遇到空白字符会停下来。

    printf("%5d", n) 中,%5d 表示按照 5 位数打印,不足 5 位数在前面补空格。

    strchr 的作用是在一个字符串中查找单个字符。strchr(s, buf[i]) 的作用是返回字符 buf[i] 在 s 中第一次出现的我i之

    printf 输出到屏幕,fprintf 输出到文件,而 sprintf 输出到字符串。多数情况下,屏幕总是可以输出的,文件一般也能够写(除非磁盘满或者硬件损坏),但字符串就不一定了:应该保证写入的字符串有足够的空间。可以用 sprintf 把信息输出到字符串,用法和 printf、fprintf 类似。但应当保证字符串足够大,可以容纳输出信息。

    函数 strlen(s) 的作用是获取字符串 s 的实际长度。什么叫实际长度呢?字符数组 s 的大小是 20,但并不是所有空间都用上了。如果输入是 “2357”,那么实际上 s 只保存了 5 个字符(不要忘记了还有一个结束标记 “”),后面 15 个字符是不确定的。strlen(s) 返回的是结束标记之前的字符个数。因此这个字符串的各个字符依次是 s[0], s[1], ..., s[strlen[s] - 1],而 s[strlen(s)] 正是结束标记 “”。

    Q:下面这行代码执行时,系统是否也会自动在字符串末尾加上结束标记 “”?
    A:是。
    参见下面的实验验证代码:

    #include<stdio.h>
    #include <string.h>
    
    int main()
    {
        char a = 0;
        int b = 0;
        char c = 1;
        char buf[10];
        for (int i = 0; i < 10; i++)
        {
            printf("%d ", buf[i]);
        }
        printf("
    ");
        // printf("%d", a);
        // printf("
    ");
        sprintf(buf, "%d%d%d%d%d", 1, 2, 3, 4, 5);
        printf("%s", buf);
        printf("
    ");
        for (int i = 0; i < strlen(buf); i++)
        {
            printf("%d ", buf[i]);
        }
        printf("
    ");
        printf("%d ", buf[5]);
        printf("%d ", buf[6]);
        printf("%d", buf[7]);
    
        return 0;
    }
    

    其输出是:
    0 0 0 25 21 64 0 0 0 0
    12345
    49 50 51 52 53
    0 0 0
    显然原来的 64 被系统自动改成了 0,也就是 "",也就是 NUL(空字符 Null)。

    Q:下面的代码中,输出 int 类型整数到字符串中,是否是按照原样 “打印” 到字符串的,比如 555,打印到字符串数组中就是三个字符 5?
    A:是。
    参见下面的测试代码:

    #include<stdio.h>
    #include <string.h>
    
    int main()
    {
        char a = 0;
        int b = 0;
        char c = 1;
        char buf[10];
        for (int i = 0; i < 10; i++)
        {
            printf("%d ", buf[i]);
        }
        printf("
    ");
        // printf("%d", a);
        // printf("
    ");
        sprintf(buf, "%d%d", 1, 555);
        printf("%s", buf);
        printf("
    ");
        for (int i = 0; i < strlen(buf); i++)
        {
            printf("%d ", buf[i]);
        }
        printf("
    ");
        printf("%d ", buf[5]);
        printf("%d ", buf[6]);
        printf("%d", buf[7]);
    
        return 0;
    }
    

    输出结果为:
    0 0 0 25 21 64 0 0 0 0
    1555
    49 53 53 53
    64 0 0

    通常情况下,int 是 32 位的。

    善用常量数组往往能简化代码。定义常量数组时无需指明大小,编译器会计算。

  • 相关阅读:
    专业英语阅读(二)
    专业英语阅读(一)
    高精度运算
    高精度运算——加减乘除阶乘
    python常见编程面试题汇总
    python线程
    反射
    单例模式
    生成器、迭代器
    python装饰器
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14188389.html
Copyright © 2011-2022 走看看