Вывести сообщение, если каждый символ первой строки первого файла содержится во втором - C (СИ)
Формулировка задачи:
Всем привет
Прошу помощи с написанием программы по Так же, по этому коду интересует, как можно сделать неограниченное количество введенных символов. То есть, что бы массив символов состоял из N-Символов, а не из 5(как у меня)?!
Я понимаю что много прошу, но нуждаюсь в помощи. Если бы сроки лабы так не поджимали, сам бы думаю написал. Если можете, помогите. Хотя бы 1 половину. Хотя бы чуть-чуть. Буду очень благодарен.
Просто очень запустил Си, так как был уверен, что у меня с ним проблем не будет. Но... Вот такой вот я неуд, пропустил лекцию по файлам и все... А по теории с и-нета, без пояснений мало чему смог научится. На понедельник нужно принести 3 лабы. 1 Уже написал, 1 еще завтра напишу, и надеюсь вы поможете с этой.
Си
. Программа состоит из 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; }
Решение задачи: «Вывести сообщение, если каждый символ первой строки первого файла содержится во втором»
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; }
Объяснение кода листинга программы
Вывод сообщения, если каждый символ первой строки первого файла содержится во втором
- Ввод имени файла с помощью функции
printf
иgets
. - Открытие файлов
work
иread
в режиме чтения. - Чтение символов из файла
read
и вывод их на экран с помощью функцииfputc
. - Закрытие файла
read
. - Если файл
work
не является пустым, переходим к шагу 6, иначе переходим к шагу 11. - Ввод строки S1 с помощью функции
fgets
. - Ввод строки S2 с помощью функции
fgets
. - Вычисление длины строк S1 и S2.
- Проверка наличия символа S1 в S2 и подсчет количества таких символов.
- Если длина S1 не равна длине S2, выводим сообщение об ошибке.
- Если количество символов S1 в S2 не равно длине S1, выводим сообщение об ошибке.
- Если количество символов S1 в S2 равно нулю, выводим сообщение
S1<>S2
. - Если количество символов S1 в S2 не равно нулю, выводим сообщение
S1=S2
. - Чтение символов из файла
read
и вывод их на экран с помощью функцииfputc
. - Закрытие файлов
read
иwork
. - Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д