题意理解

对于每个输入的字符串,从前往后每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;
}

时间复杂度:O(MN)O(MN)。其中M是每个字符串长度,N为字符串个数。
空间复杂度:O(1)O(1)。没有开辟新空间。

方法二

使用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;
}

时间复杂度:O(MN)O(MN)。其中M是每个字符串长度,N为字符串个数。
空间复杂度:O(1)O(1)。没有开辟新空间。