【问题标题】:Searching for equal strings using strcmp使用 strcmp 搜索相等的字符串
【发布时间】:2015-11-11 15:12:56
【问题描述】:

我有一个包含相同长度的真实单词(字典)的二维数组。我还有一个二维字符串数组(主要是垃圾,里面有一些真实的单词)。我试图通过使用 strcmp 在第二个数组中找到真正的单词。一旦找到一个真实的单词(strcmp = 0),我想将该单词复制到一个名为actual_words 的新二维字符串数组中,然后打印它。

但是我的似乎只打印了Words which are viable: 并没有实际的文字......不过没有错误。

所有字符串都以空结尾。

void check_dictionary (char equal_length_dictionary[MAX_WORDS][MAX_WORD_LENGTH], char nextword[MAX_WORDS][MAX_WORD_LENGTH])

{
int arr, dict;
char actual_words[MAX_WORDS][MAX_WORD_LENGTH];

printf("\nWords which are viable: \n");

for (dict = 0; equal_length_dictionary[dict][0] != '\0'; dict++)
{
//look through each word in dictionary
    for (arr = 0; nextword[arr][0] != '\0'; arr++) 
    //look through each word in the array
        {
                if ((strcmp(equal_length_dictionary[arr], nextword[arr])) == 0) 
                //test for differences between dictionary and word
                    {
                        strcpy(actual_words[arr], nextword[arr]); 
                        //if no differences, copy words
                        printf("%s ", actual_words[arr]);
                    }
        }
}     
printf("\n");
}

【问题讨论】:

  • 数组中的单词是否以空值结尾? (如果没有,你应该使用strncmpstrncpy
  • @Finlandia_C 请注意strncpy,因为它可能并不总是零终止字符串。
  • 如果列表很大,对两个列表进行排序然后通过两个列表查找匹配项会更快。

标签: c arrays string strcmp


【解决方案1】:

您在比较两个数组时使用了相同的索引:

if ((strcmp(equal_length_dictionary[arr], nextword[arr])) == 0) 

数组equal_length_dictionary 应该使用索引dict 而不是arr

【讨论】:

  • 同上,仍然打印零字。
  • 从您发布的代码中无法确定问题所在。
【解决方案2】:

我猜是比较;

strcmp(equal_length_dictionary[arr], nextword[arr])

您对两个数组使用相同的变量arr。第一个数组应该由dict索引我猜:

strcmp(equal_length_dictionary[dict], nextword[arr])

另外,两个字符串都需要以零结尾,否则您将有未定义的行为。如果字符串不是以零结尾的,则需要改用strncmp(或者可能是memcmp)。

【讨论】:

  • 这仍然打印零字。我已经补充说,它们都是主要问题中的空终止字符串。
  • @Finlandia_C 可能是时候使用调试器了,并逐行检查代码以查看发生了什么以及字符串的真正含义。请记住,strcmp 区分大小写,并且字符串中的空格也会进行比较(并且空格包括制表符和换行符,例如 fgets 包含在它读取的字符串中)。可选地打印出引号内的两个字符串以检查它们是否确实相等。
  • 我使用 fscanf 而不是 fgets 来读取字符串。我猜是时候学习如何使用调试器了!
【解决方案3】:

在没有看到被比较的单词的情况下,我有一个猜测: 1. 有你不知道的前导或尾随空格。尝试在 print 语句中打印出带有分隔符的字符串,这样您就可以轻松查看是否有任何需要修剪的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多