我對這個有點卡住了..我的代碼在遇到第一個空字串( text[1] )時應該停止大寫字符..但是當我放入斷點并向前邁進時; 第三個字串被認為是在第一個字串之后。第二個元素被忽略。練習是列印所有字串,但只將第一個字串大寫。
#include <vector>
int main()
{
std::vector<std::string> text = { "One, two, three-four-five. Once I caught a fish alive.", "", "Six, seven, eight-nine-ten. Then I let it go again.", "", "Why did I let it go? Because he bit my finger so.", "", "Which finger did he bite? This little finger on my right!"};
for (auto it = text.begin(); it != text.end(); it) {
for (auto it2 = it->begin(); it2 != it->end() && !it->empty(); it2) { //empty string in text[2] never satisfies second condition
*it2 = toupper(*it2);
}
std::cout << *it << std::endl;
};
}
任何想法為什么?謝謝。
uj5u.com熱心網友回復:
如果我理解正確,您想在第一個空字串之后停止大寫,而不是在第一個空字符之后,例如:
一二三四五。一旦我釣到了一條活魚。
六、七、八九十。然后我又放了它。
為什么我放了它?因為他這么咬我的手指。
他咬的是哪個手指?我右邊的這個小指!
只需一個回圈并轉換整個字串即可完成此操作:
int main()
{
std::vector<std::string> text { "One, two, three-four-five. Once I caught a fish alive.", "", "Six, seven, eight-nine-ten. Then I let it go again.", "", "Why did I let it go? Because he bit my finger so.", "", "Which finger did he bite? This little finger on my right!"};
for (auto it = text.begin(); it != text.end() && !it->empty(); it) {
std::transform(it->begin(), it->end(),it->begin(), ::toupper);
};
for (auto const& str : text) {
std::cout << str << std::endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362734.html
