Проверка двух строк, если они состоят из одинаковых слов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нам задаются две строки, если они состоят из одинаковых слов, то функция должна вернуть 1, иначе 0. Регистр букв и знаки препинания не учитываются. Примеры:
res = sameWords ( "Hello students.", "HELLO studEnts!" );
   /* res = 1 */
 
   res = sameWords ( " He said 'hello!'", "'Hello.' he   said." );
   /* res = 1 */
 
   res = sameWords ( "He said he would do it.", "IT said: 'He would do it.'" );
   /* res = 1 */
 
   res = sameWords ( "one two three", "one two five" );
   /* res = 0 */
Помыслив немного составил для себя алгоритм: 1.Перевести все символы в нижний регистр букв. (если я не ошибаюсь есть такая команда) 2.Разбить строки на два двумерных массива по словам, при этом выкинем знаки препинания. 3.Убрать повторяющиеся слова. 4.Проверяем если все слова из первого массива есть во втором. Алгоритм вроде выглядит рабочим, но боюсь что будет много мороки с памятью. Может у кого есть идеи как упростить его?

Решение задачи: «Проверка двух строк, если они состоят из одинаковых слов»

textual
Листинг программы
#ifndef __PROGTEST__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
#endif /* __PROGTEST__ */
 
int sameWords ( const char * a, const char * b )
 { int i=0,l=0,f=0,h=0,n=1,nb=1,fb=0,na=0,nb1=0,ka=0,kb=0;
   char arrayA[200][1000]={};
 
    while(a[i]!='\0') {
    while (a[l]==' ') {l++;i++;}
    if (a[i]==' ') {f++;h=0;n++;while(a[i+1]==' '){i++;} }
        if ((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z')) {
              
                     arrayA[f][h]=a[i];
                    ka++;
                    h++;
                }
        i++;
   }
   char arrayB[200][1000]={};
 
i=0;f=0;h=0;l=0;
 
      while(b[i]!='\0') {
    while (b[l]==' ') {l++;i++;}
    if (b[i]==' ') {f++;h=0;nb++;while(b[i+1]==' '){i++;} }
        if ((b[i]>='A'&&b[i]<='Z')||(b[i]>='a'&&b[i]<='z')) {
                
                     arrayB[f][h]=b[i];
                  kb++;
                    h++;
                }
        i++;
   }
for (f=0;f<n;f++){
    for(h=0;arrayA[f][h]!='\0';h++){
        printf("%c", arrayA[f][h]);}
    printf ("\n");
        }
for (f=0;f<nb;f++){
    for(h=0;arrayB[f][h]!='\0';h++){
        printf("%c", arrayB[f][h]);}
    printf ("\n");
        }
 
if (ka==0&&kb==0) {return 1;}
 
for (f=0;f<n;f++){
    for(fb=0;fb<nb;fb++){
        if((strcasecmp(arrayA[f],arrayB[fb]))==0) na++;}if (na<1){return 0;}na=0;}
 
for (fb=0;fb<nb;fb++){
    for(f=0;f<n;f++){
        if((strcasecmp(arrayB[fb],arrayA[f]))==0) nb1++;}if (nb<1){return 0;}na=0;}
 
 
return 1;
 }
 
#ifndef __PROGTEST__
int main ( int argc, char * argv [] )
 {
   int res;
 
   res = sameWords ( "Hello students.", "HELLO studEnts!" );
   /* res = 1 */
 
   res = sameWords ( " He said 'hello!'", "'Hello.' he   said." );
   /* res = 1 */
 
   res = sameWords ( "He said he would do it.", "IT said: 'He would do it.'" );
   /* res = 1 */
 
   res = sameWords ( "one two three", "one two five" );
   /* res = 0 */
 
   return 0;
 }
#endif /* __PROGTEST__ */

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы