#include <iostream>
#include <vector>
#include <ctime>
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 w1 = words[0];
string largestword;
for (int i = 1; i < 5; i ) {
if (words[i] > w1) {
largestword = words[i];
}
}
cout << "The largest word is: " << largestword;
}
int main()
{
vector<string> words;
string names;
words = createvector();
mostchar(words);
}
我不明白為什么它每次都選擇最后一個元素或倒數第二個元素。是的,我嘗試更改 for(int i = 1; i < 5; i ) 但這對我所做的沒有任何影響。
uj5u.com熱心網友回復:
首先,您正在按字典順序比較字串。
if (words[i] > w1) {
其次,您總是與陣列第一個元素中的單詞進行比較
if (words[i] > w1) {
并且變數w1沒有在回圈內改變。因此,向量中任何最后一個大于的元素w1都將分配給變數largestword。
使用for回圈,函式可以如下所示
void mostchar( const std::vector<std::string> &words )
{
size_t largestword = 0;
for ( size_t i = 1; i < words.size(); i )
{
if ( words[largestword].size() < words[i].size() )
{
largestword = i;
}
}
if ( largestword != words.size() )
{
std::cout << "The largest word is: " << words[largestword] << '\n';
}
}
請注意,在一般情況下,用戶可以向函式傳遞一個空向量。您必須在函式中檢查這種可能性。
請記住,std::max_element可以使用標準演算法代替手動撰寫的 for 回圈。
例如
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
void mostchar( const std::vector<std::string> &words )
{
auto largestword = std::max_element( std::begin( words ), std::end( words ),
[]( const auto &a, const auto &b )
{
return a.size() < b.size();
} );
if ( largestword != std::end( words ) )
{
std::cout << "The largest word is: " << *largestword << '\n';
}
}
uj5u.com熱心網友回復:
這里有幾個問題:
1:你應該使用類似的東西.length()來比較“長度”
2:您words[0]每次都將陣列中的下一個單詞進行比較。
編輯:為了進一步解釋這一點,有一個string w1 = words[0];. w1然后在此處if的for回圈中使用:
string w1 = words[0];
string largestword;
for (int i = 1; i < 5; i ) {
if (words[i] > w1) {
largestword = words[i];
}
}
導致值words[0]成為回圈中反復比較的值。
將比較線調整為if (words[i].length() > largestword.length())和 解決這兩個問題。您也可以通過w1這種方式完全去除。
#include <iostream>
#include <vector>
#include <ctime>
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;
for (int i = 0; i < 5; i ) {
if (words[i].length() > largestword.length()) {
largestword = words[i];
}
}
cout << "The largest word is: " << largestword;
}
int main()
{
vector<string> words;
string names;
words = createvector();
mostchar(words);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/374304.html
上一篇:二進制表示中的最長公共前綴
下一篇:在選擇選項下拉串列中更改背景顏色
