【发布时间】:2021-05-22 07:31:55
【问题描述】:
我在 c 中编写了一个代码来搜索字符串中的重复单词,它只是将字符串中的每个单词附加到 2d 字符串数组中,但是对于行数和重复字符串,它返回 0,什么是代码有问题?
int main() {
char str[50] = "C code find duplicate string";
char str2d[10][50];
int count = 0;
int row = 0, column = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] != '\0' || str[i] != ' ') {
str2d[row][column] = str[i];
column += 1;
} else {
str2d[row][column] = '\0';
row += 1;
column = 0;
}
}
for (int x = 0; x <= row; x++) {
for (int y = x + 1; y <= row; y++) {
if (strcmp(str2d[x], str2d[y]) == 0 && (strcmp(str2d[y], "0") != 0)) {
count += 1;
}
}
}
printf("%i %i", row, count);
return 0;
}
【问题讨论】:
-
建议:利用这个机会学习使用调试器。
-
条件
str[i] != '\0' || str[i] != ' '不会像您预期的那样工作。请了解 De Morgan's laws 用于否定布尔表达式。顺便说一句,str[i] != '\0'在循环内将始终为真,因为这是由循环条件处理的。 -
循环条件
x <= row和y <= row也会出错。它们会使循环超出范围。 -
最后,
strcmp(str2d[y], "0")应该做什么?