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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 20:02   #1
interprise777
 
Регистрация: 13.05.2013
Сообщений: 3
По умолчанию Работа с файлами

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

Код:
#include "stdafx.h"
#include "conio.h"
#include "string.h"
#include "iostream"
#include "stdio.h"
#include "math.h"

int main()
{ char ch, sl[50];
  char text[]="yet, yter, teror, toriu, ytka, tapok, tochka.";
  FILE *pf, *pr;                      
  pf=fopen("new1.txt","w");  
  system("cls");
  fprintf(pf,"%s\n",text);        
  fclose(pf);                            
  pf=fopen("new1.txt","r");   
  pr=fopen("new2.txt","w");  
  while (!feof(pf))                  
  { ch=getc(pf);                      
     if (ch != ' .')
         putc(ch,pr);                    
  }
  fclose(pr);                           
  rewind(pf);                          
  fgets(sl,50,pf);                     
  printf("%s\n",sl);                 
  pr=fopen("new2.txt","r");   
  while (!feof(pr))                 
  {  ch=getc(pr);                   
     putchar(ch);                  
   }
  fclose(pf);                          
  fclose(pr);
  getch();
}
interprise777 вне форума Ответить с цитированием
Старый 13.05.2013, 22:37   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

-Зачем вам math.h?
-ЛУчше сделать так
нужно так: char *text[]={"yet,", "yter,", "teror,", ...............//something};
проход по первому массиву символов
for (int i = 0; i<3; i++)
{
//do something with text[0][i];
}
Вам ведь нужен двумерный массив, т.е массив массивов. У вас есть массив строк, состоящий из массива символов.
-проверьте находится ли открываемый файл в том же месте, где и программа (exe)
Igor95 вне форума Ответить с цитированием
Старый 14.05.2013, 15:44   #3
interprise777
 
Регистрация: 13.05.2013
Сообщений: 3
По умолчанию

Библиотеки я подключаю по привычке) это ж не ошибка. А вот про массив я не понял(можете по другому объснить пожалуйста). У меня есть файл, в котором есть некоторая строка из слов. Мне нужно - те слова, что по условию, перенести в другой файл. Файлы кстати находятся в том месте где и (exe) файлик. Как я понимаю мне наверно нужно подсчитать количество запятых. Ведь можно ж будет вывести все слова с количеством запятых-1, но не понимаю как это реализовать. Скажите, пожалуйста, я хоть правильно думаю?

Последний раз редактировалось interprise777; 14.05.2013 в 15:54.
interprise777 вне форума Ответить с цитированием
Старый 14.05.2013, 17:20   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Я бы решил так:
Последнее слово в строке у нас основное, т.е с ним все слова и сравниваются...
Тогда, его либо можно вынести из исходной строки в ОТДЕЛЬНУЮ Строку, а все остальные слова в исходной строке сравнивать с той самой отдельной строкой.
НО! есть накладные расходы на память, тогда:
Можно запомнить начало и конец последнего слова (до ТОЧКИ!). И просто, опять же с помощью итераторов, проходить по строке, сравнивая каждое слово с последним, И, если выполнится наше условие, то сразу в файл его и запишем, пока не дойдем до начала последнего слова...

Для удобства лучше сделать так:
char *text[]={"yet,", "yter,", "teror,", ...............//something};


теперь про массив:
в Вашем исходном коде имеется одна единственная строка, т.е все слова в ней НЕ ЕСТЬ строки.
Я же предлагаю сделать все отдельные слова строками.

У Вас есть массив инициализированный строками:

str1
str2
str3
str4

В этом массиве имеется подмассив: символы (s, t, r, 1; и т.д.. s, t, r, 4)

Так как же нам пройти и по строкам и по символам строки одновременно! Ответ: двумерный массив

text[0][1] //первая строка (индекс - 0), второй символ строки (индекс - 1)
Нумерация элементов в массиве ВСЕГДА начинается с нуля

Вообще с двемерным намного проще будет реализовать запись в файл.

Последний раз редактировалось Igor95; 14.05.2013 в 17:31.
Igor95 вне форума Ответить с цитированием
Старый 14.05.2013, 18:09   #5
interprise777
 
Регистрация: 13.05.2013
Сообщений: 3
По умолчанию

ага спасибо!! Разобрался!
interprise777 вне форума Ответить с цитированием
Старый 14.05.2013, 18:22   #6
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

пожалуйста
Igor95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами. GoodNight Помощь студентам 7 22.12.2012 19:22
Работа с файлами }|{eka Паскаль, Turbo Pascal, PascalABC.NET 2 29.06.2012 15:35
Работа с файлами Nice Plant Помощь студентам 1 21.11.2010 05:45
работа с файлами konfetka13 Паскаль, Turbo Pascal, PascalABC.NET 2 31.05.2010 22:48