题解 | #字符串分隔#

字符串分隔

https://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7

#include <stdio.h> //使用输入输出库,可以调用printf, scanf, putchar函数
#include <string.h> //使用字符串处理库,可以调用strlen和strcpy函数

int main() { //进入主程序
    char input[102]; //定义数组来存储输入的字符串(每个字符串长度小于等于100)并预留'\n'和'\0'的位置
    while (scanf("%100s", input) != EOF) { //循环读取字符串,直到文档结束,最多每次读取100个字符,使用我们的数组input来存储这些字符
        int len = strlen(input); //定义一个len,存储input的长度,他也表示需要处理的字符串的长度
        while (len > 0) { //当len大于0的时候,证明还有字符串需要处理,继续循环
            if (len >= 8) { //循环内容是,如果len大于等于8
                for (int i = 0; i < 8; i++) { //输出这个单词
                    putchar(input[i]);
                }
                putchar('\n'); //并且换行
                // 使用指针移动来模拟 input += 8 的效果
                char* p = input; //这里要注意,通过指针的方式,将已经输出过的8个字符跳过,首先定义指针p指向input数组的开头
                p += 8; //将p向后移动8个位置
                strcpy(input, p); //将指针移动后的字符串部分复制回input数组
                len -= 8; //还要注意因为已经处理完了8个字符,需要处理的字符串的总长度-8
            } else { //当len的长度不足8(且大于0(因为在while循环中))的时候,此时证明我们需要对字符串进行补零操作
                for (int i = 0; i < len; i++) { //先将前面的长度为len的部分输出
                    putchar(input[i]);
                }
                for (int i = len; i < 8; i++) { //然后再将从len到8的位置补零
                    putchar('0');
                }
                putchar('\n'); //换行
                len = 0; //将len置零以跳出循环,接受下一个字符串
            }
        }
    }
    return 0;
}

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.输入一个字符串

2.将字符串拆分成多个,每一个由8个字符组成(如果不足8个字符用0补齐)

3.如果字符串为空则不处理(我的理解是不会出现补8个0的情况)

二、解题思路

1.每八个字符作为一组字符串接受数据

2.对于接收到的数据进行检查,如果长度不足8,用0补齐不足的部分并输出

3.如果长度等于8,直接输出

4.读取到文件末尾

全部评论

相关推荐

点赞 评论 收藏
分享
尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务