华为机试题:字符串分割

题目描述:
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:

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

输出描述:

输出到长度为8的新字符串数组

输入例子:

abc
123456789

输出例子:

abc00000
12345678
90000000

由题目和输入输出的例子,可以分为两种情况:输入个数原本就小于8,直接补0;输入个数大于8,那8的倍数部分依次输出,余下的补0输出。

#include <iostream>
#include <string>

using namespace std;
void coutstr(string& s)
{
int n = s.size();
//第一种情况
        if (n <= 8){
            string tmps(8 - n, '0');
            s = s + tmps;
            cout << s << endl;
        }
        //第二种情况
        if (n > 8){
            int d = n/ 8;
            int re = n % 8;
            for (int i = 0; i < d; i++){
                for (int j = 0; j < 8; j++){
                    cout << s[i * 8 + j];
                }
                cout << endl;
            }
            if (re != 0){
                for (int i = 0; i < re; i++){
                    cout << s[8 * d + i];
                }
                int c = 8 - re;
                for (int i = 0; i < c; i++){
                    cout << '0';
                }
                cout << endl;
            }
        }
}
int main(){
    string s1;
    string s2;
    while (cin >> s1 >> s2 ){
        coutstr(s1);
        coutstr(s2);
    }
    return 0;
}

还是多用函数本身的实现比较好啊,下边是别人写的一段代码,我直接贴图上来
这里写图片描述

趁此机会,总结下string的用法:

方法描述
string s(cp, n)这里的cp指向一个数组,把这个数组的前n个字符拷贝到s(拷贝数组时,必须指定n,否则会未定义错误)
string s(s2, pos2)从另一个字符串s2的下标开始拷贝
string s(s2, pos2, len2)从s2的pos2拷贝len2个字符
s.substr(pos, n)返回s中从pos开始的n个字符,这里的n可以不写,默认是剩下的所有字符
s.insert(pos, args)从s的pos处开始插入args指定的字符,args可以是数组,也可以是规定数量的字符(5,’!’)等
s.erase(pos, len)删除从pos开始的len个字符
s.assign(args)将s中的字符替换为args指定的字符,并返回一个指向s的引用
s.append(args)将args追加到s上,返回一个指向s的引用
s.replace(range,args)删除s中range范围内的字符,替换为args指定的字符
string的搜索操做
s.find(args)查找s中args第一次出现的位置
s.rfind(args)最后一次出现的位置
s.find_first_of(args)在s中查找args中任意字符第一次出现的位置
s.find_last_of(args)在s中查找args中任意字符最后一次出现的位置
s.find_first_not_of(args)在s中查找第一个不在args中的字符
s.find_last_not_of(args)在s中查找最后一个不在args中的字符
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值