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;
}
- 时间复杂度 --- 遍历字符串,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;
}
总结
- 对于一些简单的题目,可以考虑使用库函数。