42、输入一个字符串,请按长度为8,拆分每个输入字符串
题目:输入一个字符串,请按长度为8,拆分每个输入字符串,并进行输出。长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述
连续输入字符串。(每个字符串长度小于等于100)
输出描述
依次输出所有分割后的长度为8的新字符串。
示例
输入:abc
输出:abc00000
思路
判断每次输入的字符串长度是否为8的倍数,若是8的倍数 直接输出就行; 若不是8的倍数, 则需要补0的个数为8 - len % 8。
注意: gets()和scanf()的区别在于输入的字符串是否中间有空格; 对于前者,只有遇到"\n"时才停止输入,而对于后者, 出现"\n"或空格都停止输入
具体实现
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
int i, j;
int len, need;
while (gets_s(str))
{
len = strlen(str);
for (i = 0; i < len; i++)
{
if ((i + 1) % 8 == 0)
{
printf("%c\n", str[i]); //字符串长度为8的倍数,直接换行输出
}
else
printf("%c", str[i]);
}
if (len % 8 != 0)
{
need = 8 - len % 8; //补0的个数
for (i = 0; i < need; i++)
{
printf("0");
}
printf("\n");
}
}
return 0;
}
运行结果
复杂度
- 时间复杂度O(n) --- 其中n为字符串长度
- 空间复杂度O(1) --- 没有额外的辅助空间,常数级存储空间,数组的大小是有限个,可以忽略不计
小结
关于用VS2022
char buf[5];
scanf_s("%s", buf, 5);//表示最多读取4个字符,因为buf[4]要放'\n'
- 编译时报错:gets()未定义标识符, 可以通过在gets()后面加上_s解决,即gets_s()。