Lesson24 PoEdu培训第二课 C语言篇(16) 字符串处理函数 随堂作业
文章类别: 培训作业 0 评论

Lesson24 PoEdu培训第二课 C语言篇(16) 字符串处理函数 随堂作业

文章类别: 培训作业 0 评论

老师未批改

1. 使用 getchar 完成 fgets 和 gets 两个函数.

程序源代码:

/*************************************************************************
    > 文件名: lesson24.hw.01.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-10-09 23:12:39
 ************************************************************************/

#include <stdio.h>

#define MAX_LEN 255

/**
 * 自己写的fgets
 * fgets的特性就是
 *   1. 可以指定读取缓冲区的大小, 超过规定大小后只读取指定大小的缓冲区
 *   2. 可以指定流参数
 *   3. 可以读取'\n', ' '字符, 并以'\n'为结束读取标识
 *
 * 说明:
 *   当前自己写的函数, 最后的参数stream是无用的.
 *
 * 返回值
 *   读取的字符串长度 
 */
int fgetsHades(char* strBuffer, size_t szBufSize, FILE* stream) {

    char ch = '\0';
    size_t szStrLen = 0;
    // 读取指定长度的字符
    for (; szStrLen < szBufSize - 1; szStrLen++) {
        if ((ch = getchar()) != EOF) {
            *(strBuffer + szStrLen) = ch;
            if (ch == '\n') {
                break;
            }
        }
    }
    // 给字符串添加结束字符
    *(strBuffer + szStrLen + 1) = '\0';
    return szStrLen;
}

/**
 * 自己写的gets
 * gets的特性就是
 *   1. 不能指定读取缓冲区的大小, 超过规定大小后就造成缓冲区溢出
 *   2. 不可以读取'\n', 可以读取' '字符, 以'\n'为结束字符
 *
 * 返回值
 *   读取的字符串长度 
 */
int getsHades(char* strBuffer) {

    char ch = '\0';
    int iIndex = 0;
    // 读取指定长度的字符
    while ((ch = getchar()) != EOF && ch != '\n') {
        *(strBuffer + iIndex++) = ch;
    }
    // 给字符串添加结束字符
    *(strBuffer + iIndex + 1) = '\0';
    return iIndex;
}

int main() {
    printf("接下来测试自定义的fgets函数\n");
    printf("请输入字符串(输入3次或者字符串长度超过30自动停止输入):\n");
    for (int i = 0; i < 3; i++) {
        char str[MAX_LEN] = { '\0' };
        fgetsHades(str, 10, NULL);
        printf("第[%d]次输入的字符串为:[%s]\n", i + 1, str);
    }
    printf("接下来测试自定义的gets函数\n");
    printf("请输入字符串(输入3次自动停止输入):\n");
    for (int i = 0; i < 3; i++) {
        char str[MAX_LEN] = { '\0' };
        getsHades(str);
        printf("第[%d]次输入的字符串为:[%s]\n", i + 1, str);
    }
    return 0;
}

运行效果:
Alt 运行效果

2. 使用 putchar 完成 fputs 和 puts 两个函数.

程序源代码:

/*************************************************************************
    > 文件名: lesson24.hw.02.c
    > 作者: 花心胡萝卜
    > 邮箱: hxhlb@hxcarrot.com 
    > 创建时间: 2016-10-10 0:33:37
 ************************************************************************/

#include <stdio.h>

#define MAX_LEN 255

/**
 * 自己写的fputs
 * fputs的特性就是
 *   1. 可以指定流参数
 *
 * 说明:
 *   当前自己写的函数, 最后的参数stream是无用的.
 *
 * 返回值
 *   0 成功 
 */
int fputsHades(const char* strBuffer, FILE* stream) {
    char* pStr = strBuffer;
    while (*pStr != '\0') {
        putchar(*pStr);
        pStr++;
    }
    return 0;
}

/**
 * 自己写的puts
 * puts的特性就是
 *   1. 在字符串最后会自动添加一个'\n'
 *
 * 返回值
 *   0 成功 
 */
int putsHades(const char* strBuffer) {
    char* pStr = strBuffer;
    while (*pStr != '\0') {
        putchar(*pStr);
        pStr++;
    }
    putchar('\n');
    return 0;
}

int main() {
    printf("请输入一个字符串:(使用fgets读取)\n");
    char str[MAX_LEN] = { '\0' };
    fgets(str, MAX_LEN, stdin);
    printf("接下来是自定义的fputs输出:\n[");
    fputsHades(str, NULL);
    printf("]\n接下来是自定义的puts输出:\n[");
    putsHades(str);
    printf("]\n");

    printf("请输入一个字符串:(使用gets读取)\n");
    memset(str, 0x00, sizeof(str));
    gets(str);
    printf("接下来是自定义的fputs输出:\n[");
    fputsHades(str, NULL);
    printf("]\n接下来是自定义的puts输出:\n[");
    putsHades(str);
    printf("]\n");
    return 0;
}

运行效果:

Alt 运行效果

如有错误,请提出指正!谢谢.

回复