题意理解
对于每个输入的字符串,从前往后每8个字符为一行输出,最后如果不满8个则用“0”补齐。
方法一
使用while()循环读入字符串。每次输出字符串前8个字符,再用erase()方法将对应字符删除,直到剩余的字符个数小于8。
具体代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
int len = s.size();
//先8个一组输出字符
while(len/8 > 0)
{
for (int i=0;i<8;i++)
{
cout<<s[i];
}
cout<<endl;
s.erase(0,8);
len -= 8;
}
//如果还有剩余就在末尾加“0”
if (len)
{
for (int i=0;i<8-len;i++) s += "0";
cout<<s<<endl;
}
}
return 0;
}
时间复杂度:。其中M是每个字符串长度,N为字符串个数。
空间复杂度:。没有开辟新空间。
方法二
使用for循环输出,用j记录每次输出的起始位置,每次向后移动8个字符。
具体代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
int len = s.size();
//先8个一组输出字符
int j=0;
for (int i=8;i<=len;i=i+8)
{
cout<<s.substr(j,8)<<endl;
j=i;
}
//如果还有剩余就在末尾加“0”
if (len%8)
{
cout<<s.substr(len/8*8,len%8);
for (int i=0;i<8-len%8;i++) cout<<"0";
cout<<endl;
}
}
return 0;
}
时间复杂度:。其中M是每个字符串长度,N为字符串个数。
空间复杂度:。没有开辟新空间。