题解 | #字符串分隔#

字符串分隔

http://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7

字符串的处理。按逻辑处理即可,分三种情况讨论:字符数小于8的情况;字符数大于8且是8的整数倍的情况;字符数大于8且不是8的整数倍的情况。

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

int main() {
    string s;
    getline(cin, s, '\n');
    int n = s.size();
    int flag = 0;
    if (n < 8) {
        flag = 1;
    } else if (n % 8 == 0) {
        flag = 2;
    } else if (n % 8 != 0) {
        flag = 3;
    }

    vector<string> res;
    if (flag == 1) {
        // 不足8个字符
        int temp = 8 - n;
        string temp_s = s;
        for (int i = 0; i < temp; i++) {
            temp_s = temp_s + "0";
        }
        res.push_back(temp_s);
    } else if (flag == 2) {
        // 字符数是8的整数倍
        int block = n / 8;
        string temp_s;
        for (int i = 0; i < block; i++) {
            for (int j = 0; j < 8; j++) {
                temp_s = temp_s + s[i * 8 + j];
            }
            res.push_back(temp_s);
            temp_s.clear();
        }
    } else {
        // 字符数大于8,且不是8的整数倍
        int block = n / 8;
        int rem = n - block * 8;
        string temp_s;
        for (int i = 0; i < block; i++) {
            for (int j = 0; j < 8; j++) {
                temp_s = temp_s + s[i * 8 + j];
            }
            res.push_back(temp_s);
            temp_s.clear();
        }
        // 剩下的字符串
        for (int i = 0; i < rem; i++) {
            temp_s = temp_s + s[8 * block + i];
        }
        int temp = 8 - rem;
        for (int i = 0; i < temp; i++) {
            temp_s = temp_s + "0";
        }
        res.push_back(temp_s);
    }
    
    for (vector<string>::iterator iter = res.begin(); iter != res.end(); iter++) {
        cout << *iter << endl;
    }
    
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务