题解 | #字符串分隔#
字符串分隔
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;
}