Comparer les mots en deux chaînes

J’ai fait deux cordes. L’utilisateur peut remplir les deux.

char text[200]; char text2[200]; 

Je dois trouver des mots similaires des deux chaînes. Par exemple,

Texte = Je suis là pour toute ma vie

Text2 = Ils sont là pour nous gagner tous

Je dois programmer trouve des mots similaires à “ici”, “tous”. J’ai essayé comme ça mais il n’a pas trouvé tous les mots.

 if(strstr(text,text2) != NULL) 

et puis printf mais je pense que ce n’est pas la bonne chose.

Je pense que c’est ce que tu veux:

 char text[] = "I am here for all my life"; char text2[] = "They are here to win us all"; char *word = strtok(text, " "); while (word != NULL) { if (strstr(text2, word)) { /* Match found */ printf("Match: %s\n", word); } word = strtok(NULL, " "); } 

Il utilise strtok() pour lire la phrase mot par mot, et strstr() pour rechercher le mot correspondant dans l’autre phrase. Notez que ceci n’est pas très efficace, si vous avez beaucoup de données, vous devrez envisager un algorithme plus intelligent.

METTRE À JOUR:

Puisque vous ne voulez pas faire correspondre les mots incorporés, strstr() ne vous aidera pas beaucoup. Au lieu d’utiliser strstr() , vous devez utiliser une fonction personnalisée. Quelque chose comme ça:

 #include  int searchword(char *text, char *word) { int i; while (*text != '\0') { while (isspace((unsigned char) *text)) text++; for (i = 0; *text == word[i] && *text != '\0'; text++, i++); if ((isspace((unsigned char) *text) || *text == '\0') && word[i] == '\0') return 1; while (!isspace((unsigned char) *text) && *text != '\0') text++; } return 0; } 

L’autre code rest le même, mais remplace l’appel de strstr() par un appel à cette nouvelle fonction:

 char text[] = "I am here for all my life"; char text2[] = "They are here to win us all"; char *word = strtok(text, " "); while (word != NULL) { if (searchword(text2, word)) { /* Match found */ printf("Match: %s\n", word); } word = strtok(NULL, " "); } 

Vous devez utiliser une combinaison de strtok() et strstr() .

scinder le text en jetons avec strtok() et rechercher ce jeton dans strstr() avec strstr()

Pour sûr au lieu de strtok() Vous pouvez également utiliser strtok_r()

Décomposer le text en mots et rechercher ces mots dans strstr aide de strstr

Implémentation possible de l’algorithme:

  • Obtenir les deux chaînes de l’utilisateur (il serait peut-être préférable d’utiliser char ** au lieu de char * )
  • Triez chaque chaîne en utilisant qsort
  • Commencez par le début de la plus petite liste de chaînes et commencez votre recherche

Remarque: Il est possible de faire exécuter la dernière étape en un temps O(n)

Il y a deux choses qui, à mon avis, pourraient vous être utiles.

Comment extraire des mots d’une phrase efficacement en C?

Fractionner la chaîne en C de chaque espace blanc.

Utiliser strtok avec un espace comme délimiteur semble être une solution appropriée pour parsingr les deux chaînes en mots. On dirait que vous avez déjà mis en œuvre efficacement la deuxième étape (strsrt).