strcpy和strcmp,我做错了什么
strcpy and strcmp, what am I doing wrong?
用户应该输入一些字符串,并在完成后输入空格作为字符串。代码应返回输入的最长和最短单词。
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;
}
尝试使用char S[20][100];而不是char S[100][20];
来自cplusplus.com:
返回一个整数值,指示字符串:零值表示两个字符串相等。A值大于零表示第一个没有match在str1中的值大于在str2中的值;并且值小于零表示相反。
它不应该是1或-1,请尝试使用>/<0。另外,测试从stdio读取的字符串是否以"\0"结尾,并最终添加它(getline应该),因为strcmp会使用它。
此外,如果数组大小错误。应为char S[20][100]
。
- 您正在向后声明您的数组;看起来你真的想要CCD_ 8
-
您需要使用
< 0
和> 0
进行比较,因为strcmp()
不能保证它会给您返回1或-1。来自手册页:如果发现s1(或其前n字节)分别小于、匹配或大于s2,则
strcmp()
和strncmp()
函数返回小于、等于或大于零的整数。
您试图比较代码中的字符串,但您的问题表明您希望比较长度。对以null结尾的字符串使用strlen
来比较长度。这是参考资料。更好的是,如果您正在编写的是C++代码(正如它被标记的那样),那么您已经在使用标准库,所以继续使用std::string
。这听起来应该被标记为家庭作业,然而,在这种情况下,我认为你不能使用std::string
类。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用
- 我在查找和字符串上做错了什么?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 我在尝试将多个值push_back向量时出错。我做错了什么?
- 插入排序:我做错了什么?