问题概要
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
对应牛客网 HJ4 字符串分割
思路分析
这个题目相对来说比较简单,既然是每行8个,那么只需要用字符长度对8取模,当结果为0时,换行。
随后判断最后一行的长度,若不为8,则补0即可。以下面的代码为例,当输入字符串为"abcdefghijk"时,此时字符长度为11。
当i+1取模于8时,换行,也就是在i=7时换行,第一行为abcdefgh;
因为11%8不等于0,所以进入第二个判断中,因为8-11%8=5,所以最后一行(也就是第二行)需要补充5个0.
结果截图如下。
代码实现
#include <stdio.h>
#include <string.h>
// 分割字符串,并补0
void splitAndFillString(const char *str) {
size_t len = strlen(str);
size_t i;
for (i = 0; i < len; i++) {
putchar(str[i]);
if ((i + 1) % 8 == 0) putchar('\n');
}
// 如果不是8的倍数,则需要补0
if (len % 8 != 0) {
for (i = 0; i < (8 - len%8); i++) {
putchar('0');
}
putchar('\n');
}
}
int main() {
char input[101]; //输入缓冲区
printf("请输入一个字符串: ");
if (fgets(input, sizeof(input), stdin)) {
input[strcspn(input, "\n")] = 0; // 移除换行符
if (input[0] != '\0') {
splitAndFillString(input);
}
}
return 0;
}
结果截图
注
以上,就是对字符串分割这道题的实现了。
感谢阅读!