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 位的。

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

  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14188389.html
Copyright © 2011-2022 走看看