2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите разобраться с файлами и строчками,с++.
Сообщение17.12.2010, 00:54 


06/11/10
66
Как в с++ можно объединить строки? Задача стоит такая-объединить каждые подряд идущие две строки в файле (с простановкой символа ‘+’ между ними) и вывести результат как на экран терминала, так и в новый файл.При этом сначала программа запрашивает имя файла ,то есть как я понял мы сами должны сначала создать там какие-то строчки.

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение17.12.2010, 02:57 
Заслуженный участник


26/07/09
1559
Алматы
Странно, вы сами же и написали решение... Читаете строки из одного фала и пишите их в другой (в частности, это может быть терминал), добавляя между ними плюсик... Работать с файлами в C++ умеете?

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение17.12.2010, 04:14 
Заслуженный участник


26/07/09
1559
Алматы
Т.е. можно попробовать что-то вроде
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <fstream>

...

    std::ifstream Input("input_file");
    std::ofstream Output("output_file");

    bool EmitPlus=false;
    char Buffer[200];

    while(!Input.eof())
    {
        if(EmitPlus) Output << '+';
        EmitPlus=true;

        Input.getline(Buffer, 200);
        Output << Buffer;
    }
 


Хотя, на мой взгляд, красивше было бы как-то так (+ обработка комбинации перевод строки / возврат каретки):

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
    bool InDelimeters=false;
    char Character;

    while(Input.get(Character))
    {
        if(Character!='\n' && Character!='\r')
        {
            Output << Character;
            InDelimeters=false;
        }
        else
            if(!InDelimeters)
            {
                Output << '+';
                InDelimeters=true;
            }
    }
 


Наверное, можно и поэлегантнее это написать...

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение23.12.2010, 16:16 


06/11/10
66
помогите найти ошибку!

#include "stdio.h"
#include <iostream>

int main()
{
char str[]="text.txt";
char c;
int i=0;
FILE *Res;
Res=fopen(str,"r");
while (!feof(Res))
{
c=fgetc(Res);
if (c=='\n')
i++;
if ((i % 2==0))
fprintf(Res,"+");
}
fclose(Res);
getchar();

}

-- Чт дек 23, 2010 16:17:48 --

выдает cannot open PDB file, вообще исходный файл в какую директорию кидать?

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение23.12.2010, 18:44 
Заслуженный участник


26/07/09
1559
Алматы
2The Last Samurai
Зачем вам счетчик, что за проверка на четность? Это ведь не имеет отношения к двойным переводам строки. :) И почему вы пишите в тот же файл, который анализируете? И почему только плюс? И где тут C++?

Ужос.

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение24.12.2010, 00:07 


06/11/10
66
я понимаю, просто сейчас нет времени разбираться с вашим кодом). а как мне записать в новый файл? логика такая- я прохожу посимвольно, присваиваю каждой строке номер, в условии написано,что каждая вторая,следовательно ее номер будет кратен двум.

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение24.12.2010, 04:11 
Заслуженный участник


26/07/09
1559
Алматы
Ой, я неправильно прочитал условие вашей задачи. :) Значит и мной предложенный код работать не будет. Но его можно немножко модифицировать:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
    bool EmitPlus=false, RepeatLine=false;
    char Buffer[200];

    while(!Input.eof())
    {
        if(RepeatLine) Output << Buffer;

        if(EmitPlus) Output << '+';
        EmitPlus=true;

        Input.getline(Buffer, 200);
        if(RepeatLine) Output << Buffer;

        RepeatLine=true;
    }
 

Как видите, я добавил ещё один флажок, пару лишних проверок и лишний повторный вывод строки текста.

Получилось ужасно. Но можно написать практически дословный перевод условия:
Используется синтаксис C++
    char Buffer[200];

    Input.getline(Buffer, 200);

    while(!Input.eof())
    {
        Output << Buffer << '+';
        Input.getline(Buffer, 200);
        Output << Buffer;
    }
 

Видите, просто читаем каждую следующую строку и выводим её плюсиком соединенной с предыдущей.

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение11.01.2011, 20:42 


11/01/11
4
The Last Samurai

Если не стоит запрета на готовые функции, то можно воспользоваться функцией strcat из стандартной библиотеки языка C (подключаемый заголовок <string.h>)

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение15.01.2011, 13:46 


05/01/11
10
можно и так
Код:
   fread( buff , 1 , dwFileSize , fp );

   for( i=0; i<strlen(buff); i++ )
   {
      if( buff[i] == '\n' ) buff[i] = '+';
   }
   printf("%s\n" , buff );
   fclose( fp );

 Профиль  
                  
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение15.01.2011, 17:29 
Заслуженный участник


26/07/09
1559
Алматы
2sav
Я тоже сначала понял условие так, а оказалось, что топикстартеру нужно немножко другое. То есть,
Код:
str1
str2
str3

должно преобразоваться в
Код:
str1+str2
str2+str3

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group