为什么我得到不匹配操作符错误代码


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main () {
const int SZ = 5;
string word[SZ];
int len,min,large,max;
for(int i = 0; i < SZ; i++){
cout << "Please Enter a word five times: ";
cin >> word[i];
}
min = word[SZ].length();
for(int i = 0; i < SZ; i++){
if(word[i] < len){ // I'm getting it on this line of code
min = word[i];
}
}

return 0;
}

我的代码没有正常运行,目前我正试图找到用户输入的5个不同单词中的最小单词。

你的代码中有一些错误:

  • 你的第一个cout应该在for循环的上面而不是里面。

  • word[SZ].length()正在访问超出数组边界的字符串。您应该访问word[0]的第一个字符串。

  • 语句if(word[i] < len),len未初始化。对于这个问题,您甚至根本不需要len,而是使用min。但更重要的是,您将stringint进行比较,这就是您获得错误的原因。您需要比较字符串的length()值。

试试这个:

#include <iostream>
#include <string>
using namespace std;
int main () {
const int SZ = 5;
string word[SZ];
int min, max;
cout << "Please enter " << SZ << " words: ";
for(int i = 0; i < SZ; i++){
cin >> word[i];
}
min = max = word[0].length();
for(int i = 1; i < SZ; i++){
if (word[i].length() < min){
min = word[i].length();
}
if (word[i].length() > max){
max = word[i].length();
}
}
cout << "min: " << min << ", max: " << max << endl;
return 0;
}

在线演示

对于初学者来说,这个(修改过的)语句:

cout << "Please Enter " << SZ << " words: ";

应该放在for循环之前:

for(int i = 0; i < SZ; i++){
cin >> word[i];
}

在这个语句中:

min = word[SZ].length();

你正在使用索引为SZ的数组中不存在的元素,而数组的有效索引范围是[0, SZ)

所以,重写为:

auto min = word[0].length();

for循环中,该语句:

if(word[i] < len)

没有意义。你需要写:

if(word[i].length() < min)

同样,这个语句:

min = word[i];

赋值操作符的操作数无效。

循环可以像

auto min = word[0].length();
for( size_t i = 1; i < SZ; i++ ){
if( word[i].length() < min ){ 
min = word[i].length();
}
}

如果你需要找到最小长度的单词,那么for循环可以按照如下方式查找

size_t min = 0;
for( size_t i = 1; i < SZ; i++ ){
if( word[i].length() < word[min].length() ){ 
min = i;
}
}

请注意,在头文件<algorithm>中声明了一个标准算法std::min_element,可以用来代替手工编写的循环。

最新更新