2014 dxdy logo

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

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




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

 
 
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение17.12.2010, 02:57 
Странно, вы сами же и написали решение... Читаете строки из одного фала и пишите их в другой (в частности, это может быть терминал), добавляя между ними плюсик... Работать с файлами в C++ умеете?

 
 
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение17.12.2010, 04:14 
Т.е. можно попробовать что-то вроде
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
помогите найти ошибку!

#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 
2The Last Samurai
Зачем вам счетчик, что за проверка на четность? Это ведь не имеет отношения к двойным переводам строки. :) И почему вы пишите в тот же файл, который анализируете? И почему только плюс? И где тут C++?

Ужос.

 
 
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение24.12.2010, 00:07 
я понимаю, просто сейчас нет времени разбираться с вашим кодом). а как мне записать в новый файл? логика такая- я прохожу посимвольно, присваиваю каждой строке номер, в условии написано,что каждая вторая,следовательно ее номер будет кратен двум.

 
 
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение24.12.2010, 04:11 
Ой, я неправильно прочитал условие вашей задачи. :) Значит и мной предложенный код работать не будет. Но его можно немножко модифицировать:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
The Last Samurai

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

 
 
 
 Re: Помогите разобраться с файлами и строчками,с++.
Сообщение15.01.2011, 13:46 
можно и так
Код:
   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 
2sav
Я тоже сначала понял условие так, а оказалось, что топикстартеру нужно немножко другое. То есть,
Код:
str1
str2
str3

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

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group