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

59 阅读2分钟

题目描述

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

输入描述

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

输出描述

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

示例

输入:abc
输出:abc00000

思路

法1常规思路先在长度不是8的倍数的字符串后边补0,然后每隔8个字符substr(i,8)输出打印并换行。

法2使用cout自带函数实现用width()函数控制输出宽度,用fill()函数填充0,用left调整左对齐输出,截取8个字符输出并换行。

具体实现

法1常规思路

#include<iostream>
using namespace std;
int main(){
    string a;
    int b,c;
    while(cin>>a){
        //补0
        b=a.size();
        if(b%8 != 0){
            c=8-b%8;
            for(int i=0; i<c; i++)
            a.push_back('0');
        }
        //按格式输出
        for(int i=0; i<a.size(); i=i+8)
        cout<<a.substr(i,8)<<endl;
    }
}

法2使用cout自带函数

#include<iostream>
using namespace std;
int main(){
    string a;
    int b;
    while(cin>>a){
        b=a.size();
        for(int i=0; i<b; i+=8){
            cout.width(8); //保证输出宽度是8
            cout.fill('0'); //填充字符是0
            cout<<left<<a.substr(i,8)<<endl; //8个8个的输出,注意left写法
        }
    }
}

时间复杂度

法1常规思路

  • 时间复杂度:O(n),n为字符串长度。

  • 空间复杂度:O(1)

法2cout自带函数

  • 时间复杂度:O(n),n为字符串长度。

  • 空间复杂度:O(1)

小结

C++中string常用函数:

  • put_back():在字符串尾部插入一个字符。

  • insert(pos,char):在指定的位置p前插入字符。

  • compare(a):字符串与a比较看是否相同,返回-1/0/1。

  • append(a):拼接字符串。或者直接用+=,即s2 += s3.c_str(),也可实现字符串拼接。

  • erase():字符串的删除,其中括号里可以用数组下标表示也可用迭代器表示,删除的范围。

  • string遍历用迭代器或下标。

  • replace(pos,n,char):字符替换。

  • tolower(char),toupper(char):大小写转换。

  • find(str,pos):表示从字符串的pos位置开始查找指定元素str,也可不填第二个参数,默认从开头查找。

  • substr(pos,len):表示提取从pos开始的len长度的字符串。pos默认为0。

cout常用函数总结

  • cout.put():专门输出字符,不可输出整型。

  • cout.width():可以控制输出字符域宽度,且不足用空格填充,默认右对齐

  • cout.fill():改变填充的字符。

  • left:输出数据在本域宽范围内向左对齐。

  • right:输出数据在本域宽范围内向右对齐。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情