【问题标题】:Why am I geting the no match operator error code为什么我收到不匹配运算符错误代码
【发布时间】:2021-12-07 14:56:15
【问题描述】:
#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 个不同单词中最小的单词。

【问题讨论】:

  • 请显示您遇到的确切错误
  • min = words[SZ].length() 怎么想?
  • word[i]stringlenint - 那么您到底希望 word[i] &lt; len 做什么?
  • word[i] 是一个字符串。您正在将其与 int 进行比较。
  • 为什么将words[]words[].length() 进行比较?您是否在编译器上启用了警告?

标签: c++ string for-loop min string-length


【解决方案1】:

您的代码中有一些错误:

  • 您的第一个cout 应该在for 循环之上,而不是在它内部。

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

  • 在声明if(word[i] &lt; 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;
}

Online Demo

【讨论】:

    【解决方案2】:

    首先,这个(修改后的)声明:

     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;
        }
    }
    

    注意,在标头&lt;algorithm&gt;中声明了一个标准算法std::min_element,可以用来代替手动编写的循环。

    【讨论】:

    • "有一个标准算法std::min_element()" - 还有std::minmax_element() 用于同时查找最小和最大元素
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多