C++查找最长字符串的代码始终返回数组最后一个元素是什么原因
问题原因分析
你的代码存在两处核心逻辑错误,直接导致输出不符合预期:
- 字符串比较规则错误:C++中
std::string的>运算符执行的是字典序比较,而非你预期的字符串长度比较。比如"boy"和"application"对比时,"boy"字典序更高会被判定为更大,哪怕"application"长度远大于前者,你当前的逻辑实际是在筛选字典序更大的单词,和需求完全不符。 - 最大值迭代逻辑错误:
- 你将首个元素赋值给
w1后,后续循环全程仅和首个元素比较,没有动态更新当前的最大长度基准,只要后续元素字典序大于第一个元素,就会覆盖largestword的值,所以最终输出大多是排在后面、字典序大于首个元素的单词,也就是你观察到的最后一个或倒数第二个元素。 - 如果首个元素本身就是字典序最大的,
largestword全程不会被赋值,最终会输出空字符串。
另外你原代码还遗漏了<string>头文件引入,部分编译器虽然可以正常编译,但不符合C++标准规范,存在兼容性风险。
- 你将首个元素赋值给
修复后可正常运行的代码
#include <iostream> #include <vector> #include <string> using namespace std; vector<string> createvector() { vector<string> words; string names; cout << "Please enter 5 different words: " << endl; for (int i = 0; i < 5; i++) { cin >> names; words.push_back(names); } return words; } void mostchar(vector<string> words) { // 初始化最长单词为第一个元素 string largestword = words[0]; for (int i = 1; i < 5; i++) { // 改为比较字符串长度,且和当前最长单词对比 if (words[i].size() > largestword.size()) { largestword = words[i]; } } cout << "The largest word is: " << largestword << endl; } int main() { vector<string> words = createvector(); mostchar(words); return 0; }
内容的提问来源于stack exchange,提问作者JohnIsStupid
相关产品推荐
相关产品推荐

