完成后,用户应输入一些字符串并输入空格作为字符串。
代码应返回输入的最长和最短单词。

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;
}

最佳答案

因此,有两件事:


变量应小写;
您正在定义长度错误的字符串数组(应为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;
}

关于c++ - strcpy和strcmp,我在做什么错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8977294/

10-12 16:07