使用 C++,尝试使用 for 循环和 std::max 查找向量中的最大单词
Posted
技术标签:
【中文标题】使用 C++,尝试使用 for 循环和 std::max 查找向量中的最大单词【英文标题】:Using C++, trying to find the largest word in a vector using a for-loop and std::max 【发布时间】:2020-12-15 04:23:40 【问题描述】:使用 C++,我正在尝试组合一个 for 循环,以查找字符串向量中的最大单词。我知道通过比较字长可以做到这一点。所以这只是想知道一些细节和学习一些关于 C++ 的东西,我不明白为什么这不起作用:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
std::string test = "this is a test string for sentence length ranks";
std::vector<std::string> words = "this", "is", "a", "test", "string",
"for", "sentence", "length", "ranks";
std::string temp = "";
std::string largest = "";
for (int i = 0; i != words.size(); ++i)
std::cout << "words[" << i << "]: " << words[i] << " ";
std:: cout << std::endl;
temp = std::max(temp, words[i]);
largest = std::max(temp, largest);
std::cout << "the biggest word is " << largest << std::endl;
return 0;
它返回这个:
更新:
这里的答案帮助我指明了正确的方向。事实证明,std::max 的另一个特性称为“comp”。我几乎不明白,但这似乎有效:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
std::string test = "this is a test string for sentence length ranks";
std::vector<std::string> words = "this", "is", "a", "test", "string",
"for", "sentence", "length", "ranks";
std::string tempword;
std::string longword;
int longwordint = 0;
for (int i = 0; i != words.size(); ++i)
int wordlength = words[i].length();
longwordint = std::max(longwordint, wordlength);
tempword = words[i];
longword = std::max(longword, tempword,
[](std::string longword, std::string tempword)
return (longword.size() < tempword.size()); );
std::cout << "the biggest word so far is " << longwordint;
std::cout <<" letters long: " << longword;
std::cout << " | the tempword is: " << tempword << std::endl;
return 0;
【问题讨论】:
不需要写循环。你可以简单地使用std::max_element。另外,您实际上在哪里获取每个单词的size()
并使用它?
std::max(string1, string2) 它自己给了我两个字符串中较大的一个。这就是为什么我无法弄清楚为什么循环不起作用的原因。
程序完全按照你写的那样做——那就是得到两个字符串的最大值。对于字符串,最大值由哪个字符串按顺序放置在另一个之后来表示。 max
无处可算出你的意思是字符串的长度,除非你告诉它。
你完全正确,我误解了为什么我的小 std::max(string1, string2) 测试有效。这完全是因为这个循环使用了一个向量。谢谢!
【参考方案1】:
std::max 将事物与普通比较进行比较,对于字符串,比较它们的字典顺序,而不是它们的长度。所以你循环中的所有结果都符合预期。
【讨论】:
谢谢!这解释了为什么我的独立 std:max(string1, string2) 测试有效但向量测试无效。【参考方案2】:您可以使用std::max_element
查找向量字符串中的最大单词。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
std::string test = "this is a test string for sentence length ranks";
std::vector<std::string> words = "this", "is", "a", "test", "string",
"for", "sentence", "length", "ranks";
auto largest = std::max_element(words.begin(), words.end(), [](const auto& s1, const auto& s2)
return s1.size() < s2.size();
);
std::cout << "the biggest word is " << *largest << std::endl;
return 0;
【讨论】:
谢谢,这比 for 循环好多了。尽管如此,我还是想知道为什么循环不起作用。 'std::max(temp, words[i]);` 合并值而不是字符串长度。以上是关于使用 C++,尝试使用 for 循环和 std::max 查找向量中的最大单词的主要内容,如果未能解决你的问题,请参考以下文章
C++ STL应用与实现26: 如何使用std::for_each以及基于范围的for循环 (since C++11)