【问题标题】:C++ Why is my comparison between int and str.length() not working?C++ 为什么我在 int 和 str.length() 之间的比较不起作用?
【发布时间】:2020-07-09 16:29:46
【问题描述】:

我正在向一个函数发送一个名称数组,该函数应该计算每个名称的长度并将最大的一个作为字符数发回。我对最长和 names[i].length() 的比较从来都不是真的。我将最长初始化为-1,所以名字应该用该名称中的字符长度替换-1,但是在函数结束时它返回最长的值,初始值为-1

#include <iostream>
#include <string>
using namespace std;

int findLongestName(string names[], int numNames);

int main() {
   string names[25] {"Bob Hope", "Steve Nice", "Mary Jane", "James Higgenbothem", "Ace Blue"};
   int numNames = 5;
   int longName;

   longName = findLongestName(names, numNames);
   cout << "Longest name is " << longName << " characters.\n";

   system("PAUSE");
   return 0;
}

int findLongestName(string names[], int numNames) {
    int longest = -1;

    for (int i = 0; i < numNames; i++) {
        if (names[i].length() > longest) {
            longest = names[i].length();
        }
    }

    return longest;
}

有人可以看看并解释我做错了什么吗?我应该/想要从名字 James Higgenbothem 的函数中收到 18。

【问题讨论】:

    标签: c++ string-length


    【解决方案1】:

    问题在于数据类型names[i].length() 返回unsigned int。比较 -1names[i].length() 总是会给你一个 false

    int findLongestName(string names[], int numNames) {
        unsigned int longest = 0;
    
        for (int i = 0; i < numNames; i++) {
            if (names[i].length() > longest) {
                longest = names[i].length();
            }
        }
    
        return longest;
    }
    

    【讨论】:

      【解决方案2】:

      当比较有符号值longest 和无符号值names[i].length() 时,编译器将有符号值转换为unsigned 值,这使得int longest 最初为-1,这是一个非常大的无符号数@987654326 @

      所以,本质上,这总是评估为假:

      if (names[i].length() > longest)
      

      修复:

      您可以将 string.length() 返回的 unsigned int 类型转换为 int

      if ((int)names[i].length() > longest) {
      

      或从一开始就将 最长设为无符号整数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多