题目来源
描述
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(每个字符串长度小于等于100
输出描述:
依次输出所有分割后的长度为8的新字符串
示例1
输入:abc
输出:abc00000
思路
【先整后干】先对不为8的倍数的字符串结尾补0,使其刚好为8的倍数。然后每隔8个字符输出并打印换行符。
具体实现
#include<iostream>
#include<string>
using namespace std;
//依次输出拆分后的字符串
void divive(string str)
{
//若不被8整除,末尾补0直至满足整除条件
int len = str.size();
if (len % 8 != 0)
{
int count = 8 - len % 8;
str.append(count, '0');//末尾补0
}
//按格式输出
int newlen = str.size();//填0后的新长度
int section = newlen / 8;//分段数目
for (int i = 0; i < section; i++)
{
for (int j = 8 * i; j < (8 * i + 8); j++){
cout << str[j];
}
cout << endl;
}
}
int main()
{
string str1;
while (cin >> str1){
divive(str1);
}
system("pause");
return 0;
}
时间复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)
小结
- 一开始想到的是分段,然后输出各段,最后一段做补0的特殊处理,过于繁琐
- append()函数的使用,补n位字符,str.append(count, ‘0’)