Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 02:41   #21
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от HoOpe
а компилятор показывает только текст файла 2...
Вы задали вопрос:
Цитата:
Сообщение от HoOpe
а текст из начального файла??
Я его интерпретировал как "А текст берется из начального файла??".

Если вы хотите выводить исходный текст, то придется делать дополнительный проход по файлу, т.к. изменения происходят "в реальном времени". И если выводить и исходный, и конечный текст сразу, то ничего хорошего из этого не выйдет.

Можете добавить в начало программы чтение и вывод исходного файла (после чего его нужно будет переоткрыть, или просто сместить указатель на начало). Думаю, уж это вы и сами добавите.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 03:04   #22
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

вот как написать чтение и вывод исходного файла на Си, т.е. вот этой части, которая на Паскале
Код:
{ считываем файл в массив }
  n:=0;
  while not(eof(f)) do begin
    Inc(n);
    readln(f,a[n]);
    WriteLn(a[n])    { отладочная печать }
  end;
  Close(f);
????
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 11.05.2009, 03:14   #23
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вывести файл можно по-разному. И об этом вы можете почитать в каком-нибудь учебнике в главе "работа с файлами".


Простой посимвольный вывод. Добавьте после операции открытия файла.
Код:
while(!feof(fin))
  printf("%c",fgetc(fin));
printf("\n");
fseek(fin,0,SEEK_SET);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 11.05.2009 в 03:25.
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 20:13   #24
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

пасибочки, Sazary, Вам огромное!!))) вот в таком виде она работает как требуется
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main()
{
FILE *fin,*fout;
char wrd[3][100],c,*p;
clrscr();

fin = fopen("1.txt","r");
while(!feof(fin))
  printf("%c",fgetc(fin));printf("\n");
fseek(fin,0,SEEK_SET);printf("\n");
fclose(fin);

fin = fopen("1.txt","r");fout = fopen("2.txt","w");

strcpy(wrd[0],"");strcpy(wrd[1],"");strcpy(wrd[2],"");

while(!feof(fin))
 {
  c = fgetc(fin);
  if(feof(fin)) break;
  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    fputc(c,fout);
    putc(c,stdout);
    c = fgetc(fin);
   }
  p = wrd[0];

  while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
  *p=0;
  p = wrd[1];

  while(!feof(fin)&&!((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
   {
    *p++ = c;
    c = fgetc(fin);
   }
   *p=0;
   p = wrd[2];

   while(!feof(fin)&&((c>='A'&&c<='Z')||(c>='a'&&c<='z')))
    {
     *p++ = c;
     c = fgetc(fin);
    }
  *p=0;
  fputs(wrd[2],fout);  printf("%s",wrd[2]);
  fputs(wrd[1],fout);  printf("%s",wrd[1]);
  fputs(wrd[0],fout);  printf("%s",wrd[0]);
  if(feof(fin)) break;
  fputc(c,fout);  putc(c,stdout);
 }
fclose(fin);fclose(fout);
getch();
}
но преподу не понравилось и он заставил переделать со strtok-ом... как программка тогда будет выглядеть??
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 16.05.2009, 20:21   #25
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от HoOpe
как программка тогда будет выглядеть??
Предлагаете мне ее за вас переписать?
Пробуйте. Что непонятно - спрашивайте.

Скажу только, что с strtok все будет выглядеть совсем по-другому.
В частности, сначала нужно будет считать файл в массив строк.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 21:26   #26
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

Код:
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int main()
{
int i,j,n=0,kol=0;
FILE *fin,*fout;
char wrd[3][100],c,*p;
clrscr();

fin = fopen("1.txt","r");
while(!feof(fin))
  printf("%c",fgetc(fin));
  printf("\n");
  fseek(fin,0,SEEK_SET);
  printf("\n");
  fclose(fin);

fin = fopen("1.txt","r");
fout = fopen("2.txt","w");

while(!feof(fin))
	{
		fgets(wrd[n],50,fin);
		puts(wrd[n]);
		n++;
	}
	fclose(fin);
считала файл в массив строк... а что дальше делать?? как можно понять это описание функции "Последовательный вызов функции разбивает строку s1 на лексемы, разделенные символами, содержащимися в строке s2. При первом вызове функция получает в качестве аргумента строку s1, в последующих вызовах в качестве аргумента передается NULL. При каждом вызове возвращается указатель на текущую лексему строки s1, когда лексем не осталось, возвращается NULL."???
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 16.05.2009, 21:35   #27
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
как можно понять это описание функции
Значит первый раз первый параметр - строка, из которой берем слова.
Второй параметр - строка разделителей.
При следующих вызовах первым параметром будет NULL.

Функция позволяет получать отдельные слова из строки, зная чем они разделены.

Посмотрите примеры тут:

http://programmersforum.ru/showthread.php?t=48580
http://programmersforum.ru/showthread.php?t=48477
http://programmersforum.ru/showthread.php?t=48657
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 16:53   #28
HoOpe
Пользователь
 
Аватар для HoOpe
 
Регистрация: 09.03.2009
Сообщений: 52
По умолчанию

если использовать strtok, то получим слово, разделенное какими-то символами, и остальные слова, но какая польза от этого в программе?? какая вообще польза от strtok??
когда всё становится на свои места, выясняется, что это кладбище...
HoOpe вне форума Ответить с цитированием
Старый 17.05.2009, 16:59   #29
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
если использовать strtok, то получим слово, разделенное какими-то символами, и остальные слова, но какая польза от этого в программе?? какая вообще польза от strtok??
У вас есть строка. Например, "Тест1, тест2, тест3, тест4".
Вы видите, что слова разделяются пробелом и запятой.
С помощью strtok вы можете легко получить массив этих слов.
Код:
char massiv[100][100],*p;
char str[]="Test, test, test, test";
int k=0;
p = strtok(str," ,");
strcpy(massiv[k++],p);
while(p = strtok(NULL," ,"))
 strcpy(massiv[k++],p);
После этого у нас есть массив из k слов.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.05.2009, 17:08   #30
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Или к примеру имеется файл с 3D моделью в котором каждая координата отделена точкой с запятой, а каждая вершина запятой:
Mesh Dolph01 {
284;
-1.947576;64.130737;8.130002;,
-7.800217;64.421143;-0.000000;,
...

С использованием этой ф-ии гораздо проще прочесть данные из строки.
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк в C++ defol-777 Помощь студентам 1 12.03.2009 18:10
обработка строк densan Общие вопросы Delphi 3 26.08.2008 11:11
обработка строк Xunter Помощь студентам 4 27.06.2008 21:48
Обработка строк символов Wilda Паскаль, Turbo Pascal, PascalABC.NET 3 12.12.2007 18:54