Вывести сообщение, если каждый символ первой строки первого файла содержится во втором - C (СИ)

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

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

Всем привет Прошу помощи с написанием программы по

Си

. Программа состоит из 2х "версий". Условие задачи: Дано 2 строки символов. Создать функцию, которая на вход получает строку символов, и возвращает сообщение, если каждый символ первой строки содержится во-втором. В принципе, основной код написал. А вот работать с файлами не умею =\. В общем, что нужно сделать то ( Это две разные программы. То есть, два разных проекта ): 1)Прочитать информацию с экрана в файл низкого уровня, и распечатать полученный файл. Используя файл, провести обработку данных с условия задачи. При работе, желательное использование функций open()/create()/close(),lseek()/reed()/write(). 2)Записать полученные данные с файла низкого уровня и полученный результат в новый файл с помощью потокового вывода. С помощью функции вывода верхнего уровня, распечатать на экран полученный файл. При работе, желательное использование функций fopen(), fclose(), fseek(), fread(), fwrite(), fprintf(), fgets(), fputs(), fgetc(), fputc(). Вот код "основной" части программы(Если её можно назвать основной о_О) Что не понятно по коду - спрашиваем Но думаю, тут ничего непонятного нет:
int check(char S1[5], char S2[5])
{int i,j;
 int res,num;
{res=0;num=0;
  for(i=0;i<5;i++)
 {
  for(j=0;j<5;j++)
   {
   if(S1[i]==S2[j]) {res=1;num++;};
   }
 }
if (num!=5) res=0;
}
  return res;
}
 
#pragma argsused
int main(int argc, char* argv[])
{char S1[5];
 char S2[5];
 int i,j,res;
  {
 
 puts("Enter S1(max=10):\n");
 gets(S1);
 puts("Enter S2(max=10):\n");
 gets(S2);
 puts("________________\n");
 
 res=check(S1,S2);
 if(res==0) puts("S1<>S2 \n");
 if(res==1) puts("S1=S2 \n");
 
  }
 getch();
 return 0;
}
Так же, по этому коду интересует, как можно сделать неограниченное количество введенных символов. То есть, что бы массив символов состоял из N-Символов, а не из 5(как у меня)?! Я понимаю что много прошу, но нуждаюсь в помощи. Если бы сроки лабы так не поджимали, сам бы думаю написал. Если можете, помогите. Хотя бы 1 половину. Хотя бы чуть-чуть. Буду очень благодарен. Просто очень запустил Си, так как был уверен, что у меня с ним проблем не будет. Но... Вот такой вот я неуд, пропустил лекцию по файлам и все... А по теории с и-нета, без пояснений мало чему смог научится. На понедельник нужно принести 3 лабы. 1 Уже написал, 1 еще завтра напишу, и надеюсь вы поможете с этой.

Решение задачи: «Вывести сообщение, если каждый символ первой строки первого файла содержится во втором»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#pragma hdrstop
#define Len 100
#define max 80
 
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{char name[16];
 char c;
 char q[1];
 FILE * work;
 FILE * read;
 char S1[Len];
 char S2[Len];
 int k1=0,k2=0,k,i,j,res=0, num=0;
//1
printf ("Enter file name:");
gets ((char *)&name);
work=fopen(name,"r");
read=fopen("yeee.txt","r");
if (work!=NULL){while ((c=fgetc(read))!=EOF) //1a
                fputc(c,stdout);
                fclose(read);
               }
else //1b
{puts (" - An error occurred while reading file \n");
 printf (" Create File? (Y/N) \n ");
 scanf ("%s",q);
 if (q=='Y') {printf ("Enter file name:\n");
              gets((char *)&name);
              work=fopen(name,"w");
              {fputs(" Enter S1:\n", work); // I)
               fgets(S1, 100, work);
               fputs("\n", work);
 
               fputs(" Enter S2:\n", work); // I)
               fgets(S2, 100, work);
               fputs("\n", work);
               fputs("<br>\n",work);
               {read=fopen("yeee.txt", "w"); // II)
                for(k=0;k<max;k++)
                if (S1[k]!='\0') k1++;
                else break;
 
                for(k=0;k<max;k++)
                if (S2[k]!='\0') k2++;
                else break;
 
                for(i=0;i<k1;i++)
                {
                for(j=0;j<k2;j++)
                if(S1[i]==S2[j]) {res=1;num++;};
                }
 
                if (k1!=k2)
                {
                if (k2-k1>0) fprintf(read,"Sorry, but ur lenght[S1] < lenght[S2] on '%d' char \n",k2-k1);
                        else fprintf(read,"Sorry, but ur lenght[S1] > lenght[S2] on '%d' char \n",k1-k2);
                fputs("\n",read);
                res=0;
                }
                if (num!=k1) res=0;
 
                if(res==0) fputs("S1<>S2 \n",read);
                      else fputs("S1=S2 \n",read);
                                
                                while ((c=fgetc(read))!=EOF) 
                fputc(c,stdout);
                fclose(read); 
               fclose(read); //2
               }
              }
              fclose(work); //2
             }
else exit(EXIT_FAILURE);
}
    getch();
    return 0;
}

Объяснение кода листинга программы

Вывод сообщения, если каждый символ первой строки первого файла содержится во втором

  1. Ввод имени файла с помощью функции printf и gets.
  2. Открытие файлов work и read в режиме чтения.
  3. Чтение символов из файла read и вывод их на экран с помощью функции fputc.
  4. Закрытие файла read.
  5. Если файл work не является пустым, переходим к шагу 6, иначе переходим к шагу 11.
  6. Ввод строки S1 с помощью функции fgets.
  7. Ввод строки S2 с помощью функции fgets.
  8. Вычисление длины строк S1 и S2.
  9. Проверка наличия символа S1 в S2 и подсчет количества таких символов.
  10. Если длина S1 не равна длине S2, выводим сообщение об ошибке.
  11. Если количество символов S1 в S2 не равно длине S1, выводим сообщение об ошибке.
  12. Если количество символов S1 в S2 равно нулю, выводим сообщение S1<>S2.
  13. Если количество символов S1 в S2 не равно нулю, выводим сообщение S1=S2.
  14. Чтение символов из файла read и вывод их на экран с помощью функции fputc.
  15. Закрытие файлов read и work.
  16. Завершение программы.

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


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

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

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