完成后,用户应输入一些字符串并输入空格作为字符串。 代码应返回最长和最短的单词。
strcmp总是返回-1 ...我做错了什么?
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char S[100][20];
int I = 0;
do {
cout << "Enter text:" << endl;
cin.getline(S[I],100);
} while (I < 19 && strcmp(S[I++],""));
char Max[100], Min[100];
strcpy(Max, S[0]);
strcpy(Min, S[0]);
for (int J = 1; J < I; J++) {
if (strcmp(S[J], Max) == 1)
strcpy(Max, S[J]);
if (strcmp(S[J], Min) == -1)
strcpy(Min, S[J]);
}
cout << "Max = " << Max << endl;
cout << "Min = " << Min << endl;
system("pause");
return 0;
}
答案 0 :(得分:2)
尝试使用 char S [20] [100]; 代替 char S [100] [20];
答案 1 :(得分:2)
所以,有几件事:
s[20][100]
); while
周期内,您应该去'i < 20
; s_min
将始终为空); strcmp
比较字符串,它不会告诉你哪一个是最长的。你应该使用strlen
...... 这是工作代码:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[20][100];
int i = 0;
do {
cout << "Enter text:" << endl;
cin.getline(s[i], 100);
} while (i < 20 && strcmp(s[i++],""));
char s_max[100], s_min[100];
strcpy(s_max, s[0]);
strcpy(s_min, s[0]);
for (int j = 1; j < i-1; j++) {
if (strlen(s[j]) > strlen(s_max))
strcpy(s_max, s[j]);
if (strlen(s[j]) < strlen(s_min))
strcpy(s_min, s[j]);
}
cout << "Max = " << s_max << endl;
cout << "Min = " << s_min << endl;
return 0;
}
答案 2 :(得分:1)
返回一个表示其间关系的整数值 strings:零值表示两个字符串相等。一个值 大于零表示第一个字符没有 match在str1中的值大于在str2中的值;并且值小于 零表示相反。
它不应该是1或-1,请尝试使用&gt; /&lt; 0.另外,测试从stdio读取的字符串是否以“\ 0”结尾并最终添加(getline应该),因为strcmp使用它。
另外,数组大小如果错误。应该是char S[20][100]
。
答案 3 :(得分:0)
char S[20][100]
。您需要使用< 0
和> 0
进行比较,因为strcmp()
并不能保证它会返回1或-1。来自man page:
strcmp()
和strncmp()
函数返回小于,等于或大于零的整数,如果 s1 (或其第一个 n 字节)分别被发现小于,匹配或大于 s2 。
答案 4 :(得分:0)
您尝试比较代码中的字符串,但您的问题是要比较长度。对以null结尾的字符串使用strlen
来比较长度。 Here是参考。更好的是,如果您正在编写的是C ++代码(因为它已被标记),您已经在使用标准库,那么请继续使用std::string
。这听起来应该被标记为家庭作业,但是,在这种情况下,我假设您不能使用std::string
类。