gpt4 book ai didi

c++ - 如何将字符串 vector 中的每个单词更改为大写

转载 作者:行者123 更新时间:2023-11-28 06:24:14 25 4
gpt4 key购买 nike

我正在询问有关读取一系列单词并将值存储在 vector 中的信息。然后继续将 vector 中的每个单词更改为大写,并将关于八个单词的输出打印到一行。我认为我的代码要么很慢,要么无限运行,因为我似乎无法获得输出。

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

int main() {
string word;
vector<string> text;
while (getline(cin, word)) {
text.push_back(word);
}
for (auto index = text.begin(); index != text.end(); ++index) {
for ( auto it = word.begin(); it != word.end(); ++it)
*it = toupper(*it);
/*cout<< index << " " << endl;*/
}

for (decltype(text.size()) i = 0; i != 8; i++)
cout << text[i] << endl;

return 0;
}

最佳答案

至少据我所知,这里的想法是忽略现有的行结构,每行写出 8 个单词,而不考虑输入数据中的换行符。假设这是正确的,我将首先从输入中读取单词,而不注意现有的换行符。

从那里开始,就是将单词大写、写出来,以及(如果是 8 的倍数,则换行。

对于大部分工作,我也会使用标准算法,而不是编写自己的循环来执行诸如读取和写入数据之类的解析。由于该模式基本上只是读取一个单词,对其进行修改,然后写出结果,因此它非常适合 std::transform 算法。

执行此操作的代码可能如下所示:

#include <string>
#include <iostream>
#include <algorithm>

std::string to_upper(std::string in) {
for (auto &ch : in)
ch = toupper((unsigned char) ch);
return in;
}

int main() {
int count = 0;

std::transform(
std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout),
[&](std::string const &in) {
char sep = (++count % 8 == 0) ? '\n' : ' ';
return to_upper(in) + sep;
});
}

我们可以实现将每个字符串大写作为第二个 lambda,嵌套在第一个 lambda 中,但是 IMO,开始变得有点不可读了。同样,我们可以使用 std::tranform 来实现 to_upper 中的大写转换。

关于c++ - 如何将字符串 vector 中的每个单词更改为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com