分词逆序输出
下午做一道题准备准备期末考试。 Given a valid identifier in C programs, please write a program to reverse it by respectively reversing each part separated by ‘_’.
INPUT 3 nt_45 _me_ abc_123_456
OUTPUT tn_54 _em_ cba_321_654
看完后就开始敲了,思路就是扫一遍string,用hold去存贮还未逆序的单词。遇到'_'就开始逆序
,之后清空hold,直到结束。
信心满满的去敲了一会儿,结果发现有好多结果错误,最后发现是由于一开始没有想好start 和end到底要放在哪里,结果出现了不同的将hold赋值到s的情况,最后我将思路就定格在把start放在第一个有字符的地方,end提前i到达i的位置,遇到'_'就将end和start挪向下一个位置。
在hold往s传递是也有思维障碍,总是想不好结束位置,最后在大脑中构想两个数组,每一次的长度就是end-start
s从start开始向右
hold从end-start-1开始向左
一个个赋值。
代码如下:如有不足,欢迎更正
#include
#include
using namespace std;
void rever(string &s);
int main() {
int N;
string s;
cin >> N;
while (N--) {
cin >> s;
rever(s);
cout << s << endl;
}
return 0;
}
void rever(string &s) {
string hold;
int size = s.size(), start = 0, end = start;
for (int i = 0; i < size; i++) {
if (s[i] != '_') {
hold += s[i];
end++;
if (i == size - 1) {
for (int j = 0; j < end - start; j++) {
s[start + j] = hold[end - start - j - 1];
}
}
} else if (hold.size() != 0) {
for (int j = 0; j < end - start; j++) {
s[start + j] = hold[end - start - j - 1];
}
hold.clear();
start = end = i + 1;
} else {
start = end = i + 1;
}
}
posted on 2017-04-16 21:28 eggplant_is_me 阅读(145) 评论(0) 收藏 举报
浙公网安备 33010602011771号