2014-10-25 2 views
2
#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.найти те же слова в двух строках в c

Так, например, «Я тебя ненавижу», «ненавижу» --- это напечатает правда «Я ненавижу тебя» «Я морж» --- это будет печатать ложные

Но для некоторых причина, этот код просто держит печать false, и я не знаю, что с ним не так. Кто-нибудь сможет мне помочь?

Спасибо!

+1

использовать отладчик или бумагу и карандаш и пройти через ваша логика. Ваш код не соответствует описанной вами задаче. –

+3

Циклы с 'for (i = 0; i

+2

Вы можете использовать 'strstr' из' string.h'. –

ответ

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; 
} 
0

Ваш код действительно проверяет, находятся ли все символы в первой строке во второй строке. Поскольку вы хотите сопоставить целые слова, разделенные пробелами, загляните в функцию strtok о том, как сначала разбивать строки на подстроки. Затем вы можете использовать strcmp для сравнения каждого слова.

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; 
     } 
    } 
} 

Места перерыва заявления в положении, показанном в приведенном ниже коде. Дополнительный если заявление в конце наружной для контура проверяет, является ли совпадающая текущий символ или нет и разрывы на несоответствие т.е. флаг = 0:

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; 
} 
Смежные вопросы