arrays - 在C中检查字符串中的重复单词
问题描述
我在c中编写了一个代码来搜索字符串中的重复单词,它只是将字符串中的每个单词附加到一个二维字符串数组中,但是它为行数和重复字符串返回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;
}
解决方案
问题是:
if (str[i] != '\0' || str[i] != ' ')
应该是if (str[i] != '\0' && str[i] != ' ')
。如果我没记错的话,使用逻辑上的 or 将阻止到达该else
案例。if (strcmp(str2d[x], str2d[y]) == 0 && (strcmp(str2d[y], "0") != 0))
应该是if (strcmp(str2d[x], str2d[y]) == 0)
。否则,当单词为 时,您的代码不会计算重复项"0"
。一个。为避免混淆,请使用类似
printf("Number of rows = %d, Number of duplicates = %d\n", row+1, count);
. 由于 C 数组从索引 0 开始,这就是row
您的代码中包含的内容。但是行数是1。湾。如果您现在还没有意识到,那么您的
str
变量中没有重复项:char str[50] = "C code find duplicate string";
. 因此,您的代码返回正确的值 0。将其更改为char str[50] = "C code find duplicate duplicate";
(例如),您的代码将正确返回 1。
推荐阅读
- sharepoint - 文件夹级别的 SharePoint Online 列默认值、文件夹路径编码
- py2exe - py2exe程序找不到dll
- python-3.x - 如何使用 Python3 连接 weblogic jms 并推送消息?
- yargs - 更新到最新版本后 yargs argv 不再工作
- c# - 使用公共属性联合两个不同类型的列表
- asp.net-core - 同一 API 中的 Microsoft 身份委托和应用程序权限
- javascript - Vue Electron,如何从输入类型=“文件”获取文件夹路径
- c# - 获取C#中可重复的两个字符串之间的字符串
- azure-data-explorer - Kusto - 使用 IN 条件获取的行的自定义名称
- react-native - 如何将 RecyclerListView 从类组件转移到功能