用户应该输入几个字符串,并输入空格作为字符串,当他完成。代码应该返回输入的最长和最短的单词。
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;
}
发布于 2012-01-23 19:48:27
所以,有几件事:
比较变量应该是小写的;比较变量的长度是错误的(应该是s[20][100]
);
i < 20
;
while
go直到数组中的最后一个字符串始终是空字符串(因此:s_min
将始终是比较字符串,它不会告诉你哪个字符串是最长的。你应该使用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;
}
发布于 2012-01-23 19:21:56
请尝试使用char S20;而不是char S100;
发布于 2012-01-23 19:21:15
返回一个整数值,表示字符串之间的关系:零值表示两个字符串相等。大于零的值表示不匹配的第一个字符在str1中的值大于在str2中的值;小于零的值表示相反。
它不应为1或-1,请尝试使用>/< 0进行测试。此外,测试从stdio读取的字符串是否以'\0‘结尾,并最终添加它(getline应该),因为strcmp使用它。
另外,如果数组大小错误,请注意。应为char S[20][100]
。
https://stackoverflow.com/questions/8977294
复制