描述
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(每个字符串长度小于等于100)
输出描述:
依次输出所有分割后的长度为8的新字符串
这是我刚开始写的代码:
我觉得我的代码在逻辑上是没错的,但问题大概是,输入只有一行所以没有回车换行的这个字符。之前也这么写过,之所以没有报错大概是因为,之前的题目输入是两行。
#include <stdio.h>
#include <string.h>
int main() {
int a=0, b=0,c=0,d=0,num=0;
char input[100]={0};//定义并初始化
scanf("%s",&input[a]);//输入字符串
b=strlen(input);//b为字符串的长度,只用数组函数
if(b<8)//如果字符串长度小于8,则输出字符串并在后面加上0
{
for(a=0;a<b;a++)printf("%c",input[a]);
for(a=0;a<8-b;a++)printf("0");
}
else {//如果字符串长度大于8,则将字符串按照8个字符串划分为一组
c=b%8;
d=b/8;
for(a=0;a<(b-c);a+=8)//以8个字符为一组进行输出,每一组结尾换行
{
for(num=0;num<8;num++)//在每一组内进行字符的输出
{
printf("%c",input[a+num]);
}
printf("\n");//换行
}
if(c!=0)//if 是测试用例只通过22/27后修改的。防止字符串长度正好为八的倍数,再输出一串0
{//输出不足8个字符的那一组字符,并在结尾附上0
for(a=b-c;a<b;a++)printf("%c",input[a]);
for(a=0;a<8*(d+1)-b;a++)printf("0");
}
}
return 0;
}
学习代码:来自于https://blog.nowcoder.net/n/94db88b5168b457f99d5c1d97ca5a07a?f=comment
我觉得这个代码好高深啊,,我好像不太能理解。。而且一旦有空格,就会报错。
(后来试了一下,我的代码也会报错,而且报的错还不一样...)
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
while(scanf("%8s", str) != EOF)
{
int len = 8 - strlen(str);
printf("%s", str);
for(int i = 0; i < len; i++)
printf("0");
printf("\n");
}
}
ta的代码自测:
但是我还是很想知道ta的编程思想。。
我的代码自测: