😀蓝蓝计算机考研算法-day28字符串分割

67 阅读1分钟

Day28 2023/03/29

难度:简单

题目

输入一个字符串,请按长度为8拆分每个输入字符串并进行输出: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 。

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

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

示例

输入:abc
输出:abc00000

思路

本题较为简单,直接给出具体的算法思想:

  1. 持续读入字符串,直到结束。
  2. 对于每个字符串,按长度为8分割,如果长度不足8,则在后面补0。
  3. 输出所有分割后的长度为8的新字符串。

关键点


  • substr(起始位置, n),分割字符串的方法,从起始位置开始取得长度为n的字符串。

算法实现


c++代码实现-分割字符串

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

int main() {
  string str; // 定义字符串输入变量
  int i = 0;  // 表示当前子串的起始下标
  // 输入字符串,并判断是否有子串未处理
  while (getline(cin, str) && i < str.size()) {
    if (str.size() - i >= 8) { // 如果剩余字符串长度大于等于8
      cout << str.substr(i, 8) << endl;
    } else { // 如果剩余字符串长度小于8
      cout << str.substr(i, str.size() - i);
      for (int j = 0; j < 8 - str.size() - i; j++) {
        cout << '0';
      }
    }
    i += 8;  // 跳过已处理的字符串
  }
  return 0;
}
  • 时间复杂度 O(n)O(n)--- 遍历一次字符串,其中n为字符串长度
  • 空间复杂度 O(1)O(1)---仅常数级空间

总结

题目较为简单,巩固大家之前所学!!!