在c中找到两个字符串中的相同单词

时间:2014-10-25 04:18:53

标签: c string compare words

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
    {
    char* firstString = argv[1];
    char* secondString = argv[2];
    int i, j;
    int flag = 0;
    for (i=0; i<strlen(firstString); i++)
    {
        for (j=0; j<strlen(secondString); j++)
        {
            if (firstString[i] == secondString[j])
            {
                flag = 1;   
            }
            else
            {
                flag = 0;
                break;
            }
        }
    }
    if (flag == 1)
    {
        printf ("true\n");
        return 0;
    }
    else
    {
        printf ("false\n");
    }
    return 1;
}

所以我需要编写的程序是比较2个文本字符串,如果第二个字符串中的相同单词出现在第一个字符串中,那么我打印为true,否则,我打印为false。

所以,例如, &#34;我恨你&#34; &#34;恨&#34; ---这将打印为真 &#34;我恨你&#34; &#34;我是海象&#34; ---这会打印错误的

但由于某种原因,这段代码只是打印错误,我不知道它有什么问题。有人能帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

您的代码实际上会检查第一个字符串中的所有字符是否都在第二个字符串中找到。由于您希望匹配由空格分隔的整个单词,请查看strtok函数,了解如何首先将字符串分解为子字符串。然后你可以使用strcmp来比较每个单词。

答案 1 :(得分:0)

你可以尝试:

int main(int argc, char* argv[])
{
    char* firstString = argv[1];
    char* secondString = argv[2];
    int flag = 0;
    int count=0;

    int len2=strlen(secondString);
   while(*firstString!=NULL)
   {
      while((*firstString==*secondString)&&(*secondString!='\0')){
          firstString++;
          secondString++;                             
          count++;                            
      }
    firstString++;
    if(count==len2){
     flag=1;
     break;
    }
    else
     flag=0;

 }   


    if (flag == 1)
    {
        printf ("true\n");

    }
    else
    {
        printf ("false\n");
    }

    return 0;
}

答案 2 :(得分:0)

内部 for循环应停止在两个不匹配的字符之间匹配,因此代码中唯一的错误是下面中断语句的位置行:

for (i=0; i<strlen(firstString); i++)
{
    for (j=0; j<strlen(secondString); j++)
    {
        if (firstString[i] == secondString[j])
        {
            flag = 1;   
        }
        else
        {
            flag = 0;
            break;
        }
    }
}

中断语句放在下面代码中显示的位置。外部 for循环末尾的额外 if语句会检查当前字符是否匹配,在不匹配时中断,即flag = 0:< / p>

for (i=0; i<strlen(firstString); i++)
{
    for (j=0; j<strlen(secondString); j++)
    {
        if (firstString[i] == secondString[j])
        {
            flag = 1;   
            break;     //break position changed
        }
        else
        {
            flag = 0;
        }
    }
    if(flag==0)   //extra conditional check
       break;
}