c程序设计语言第2版 第4章

第4章 函数和程序结构

如果函数参数声明得当,程序可以自动进行合理的强制类型转换.

#include <stdio.h>
# define MAX_NUM_CHARS 500

int getline(char line[], int i);
int strindex(char s[], char t[]);
int get_str_len(char s[]);

int main() {
    // 如果输入的行包含特定的字符串, 则回显该行
    // 这里假定需要包含的字符串为 clang
    char chars[MAX_NUM_CHARS + 1];
    char chart[MAX_NUM_CHARS + 1] = "clang";
    int i;

    while ((i = getline(chars, MAX_NUM_CHARS)) > 0) {
        if ((strindex(chars, chart)) != -1) {
            printf("包含该字符串%s:\n", chart);
            printf("%s\n", chars);
        }
    }
}

int getline(char line[], int max_num_chars) {
    // 将获得的输入存到 line, 并返回长度, 长度不包括 '\0'
    // max_num_chars 是字符数组的最大长度
    int c; //输入字符
    int i = 0;

    while (--max_num_chars > 0 && ((c = getchar()) != EOF) && c != '\n') {
        line[i] = c;
        i++;
    }
    line[i] = '\0';
    return i - 1;
}

int strindex(char s[], char t[]) {
    // 返回字符串t 在 s 中开始的位置, 如果不存在, 返回-1
    int i, j, k;
    int len_s = get_str_len(s), len_t = get_str_len(t);

    if (len_t > len_s) return -1;

    for (i = 0; i <= len_s - len_t; i++) {
        k = 1;
        for (j = 0; j < len_t; j++) {
            if (t[j] != s[i + j]) {
                k = 0;
                break;
            }
        }
        if (k == 1) return i;
    }

    return -1;
}

int get_str_len(char s[]) {
    // 获取字符串长度, 不包括 '\0'
    int len = 0;
    while (s[len] != '\0') len++;

    return len;
}
/*
hello
hello cLang world
helloclangworld
包含该字符串clang:
helloclangworld
*/

C语言这种编译语言, 调试不是困难而是比较消耗时间

程序可以看作是变量定义和函数定义的集合.函数之间可以通过参数,函数返回值以及外部变量进行.

函数原型如果和函数定义或声明不在一个源文件中, 是检测不出来不匹配的.

C语言程序可以看作是由一系列外部对象构成, 这些外部对象可以是变量或者函数.C语言不允许在函数内部定义函数, 注定函数都是外部的.

© Licensed under CC BY-NC-SA 4.0

如果你想走到高处,就要使用自己的两条腿!不要让别人把你抬到高处;不要坐在别人的背上和头上。—— 尼采

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!