C++ 为什么我在 int 和 str.length() 之间的比较不起作用?
C++ Why is my comparison between int and str.length() not working?
我正在将一组名称发送到一个函数,该函数应计算每个名称的长度并将最大的一个作为字符数发回。我对 longest 和 names[i].length() 的比较从来都不是真的。我将 longest 初始化为 -1 所以 first name 应该用该名称中的字符长度替换 -1,但是在函数的末尾它 return longest 用我的初始值 -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;
}
有人可以看看并解释我做错了什么吗?我 should/want 从名称 James Higgenbothem 的函数中收到 18。
问题出在数据类型 names[i].length()
returns 和 unsigned int
上。将 -1
与 names[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;
}
当比较有符号值 longest
和无符号值 names[i].length()
时,编译器将有符号值转换为 unsigned
值,这使得 int longest
最初是 -1
, 一个非常大的无符号数 4294967295
所以,从本质上讲,这总是计算为 false:
if (names[i].length() > longest)
修复:
您可以将 string.length() 返回的 unsigned int 类型转换为 int
if ((int)names[i].length() > longest) {
或者从头开始最长一个unsigned int
我正在将一组名称发送到一个函数,该函数应计算每个名称的长度并将最大的一个作为字符数发回。我对 longest 和 names[i].length() 的比较从来都不是真的。我将 longest 初始化为 -1 所以 first name 应该用该名称中的字符长度替换 -1,但是在函数的末尾它 return longest 用我的初始值 -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;
}
有人可以看看并解释我做错了什么吗?我 should/want 从名称 James Higgenbothem 的函数中收到 18。
问题出在数据类型 names[i].length()
returns 和 unsigned int
上。将 -1
与 names[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;
}
当比较有符号值 longest
和无符号值 names[i].length()
时,编译器将有符号值转换为 unsigned
值,这使得 int longest
最初是 -1
, 一个非常大的无符号数 4294967295
所以,从本质上讲,这总是计算为 false:
if (names[i].length() > longest)
修复:
您可以将 string.length() 返回的 unsigned int 类型转换为 int
if ((int)names[i].length() > longest) {
或者从头开始最长一个unsigned int