HJ4 字符串分隔

119 阅读1分钟

Day08 2023/01/15

题目链接

难度:简单

题目

•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;

•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:

连续输入字符串(每个字符串长度小于等于100)

输出描述:

依次输出所有分割后的长度为8的新字符串

示例

输入:abc
输出:abc00000

思路一


先对长度不为8倍数的字符串结尾补0,使其刚好为8的倍数,然后按照题目要求打印出来即可。

思路二


使用c++自带的库函数实现,使用cout.widht()方法指定输出宽度,在使用 cout.fill()填充字符(当字符数小于指定宽度时会填充指定字符),再使用流操作符left指定输出字符向左对齐。

关键点


  • 思路二里面使用left是因为cout.fill()默认是从左向右填充字符,这样打印出来就不符合题目中末尾补 0 的要求,使用left优先向左对齐就可以解决

算法实现


c++代码实现1

#include <iostream>
#include <string>
using namespace std;

//方法一:
int main () {
    //输入字符串
    cout << "请输入字符串:" <<endl;
    string str;
    cin >> str;

    //先对长度不为8的倍数的字符串结尾补0
    if (str.size() % 8 != 0) {
        str.append(8 - str.size() % 8, '0');
    } 

    //按题目要求输出
    for(int i = 0; i < str.size(); i+=8)  cout << str.substr(i , 8) << endl; //从i开始输出向后8个元素
    return 0;
}
  • 时间复杂度 O(n)O(n) --- 遍历字符串,n为字符串长度
  • 空间复杂度 0(n)0(n) --- 存储字符串,n为字符串长度

c++代码实现2

#include <iostream>
#include <string>
using namespace std;

int main () {
    //输入字符串
    cout << "请输入字符串:" <<endl;
    string str;
    cin >> str;

    for (int i = 0; i < str.size(); i += 8) {
        cout.width(8); //指定输出宽度
        cout.fill('0'); //不够宽度的用0补上
        cout << left << str.substr(i, 8) <<endl; //使用流操作符left实现左对齐
    }

    return 0;
}

总结

  • 对于一些简单的题目,可以考虑使用库函数。