#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
。但更重要的是,您将string
与int
进行比较,这就是您获得错误的原因。您需要比较字符串的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
,可以用来代替手工编写的循环。