Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выравнить файл 
:(
    Опции темы
afanp
Дата 6.3.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



дан текстовый файл, нужно выровнять строки по максимальной строке файла. слова в строках разделены , : ; -
у самого ничерта не выходит :(
PM MAIL   Вверх
0xDX
Дата 6.3.2009, 19:01 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 6.2.2009

Репутация: нет
Всего: нет



Тебе все равно не сюда, иди в помощь.
PM MAIL   Вверх
afanp
Дата 6.3.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



почему мне не сюда? я сам код написал, но он неадекватно работает а иногда совсем не работает smile 
PM MAIL   Вверх
jonie
Дата 6.3.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



ну и где код? тут за тебя никто не пишет - пишут в "помощи". выложишь код, посмотрим (если, конечно, он будет адекватный)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
afanp
Дата 6.3.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Код

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void searchformax(string&workstring,string&maxstring){
    if(workstring.length()>maxstring.length()){
        maxstring.assign(workstring);}
}

void searchspace(string&workstring,int&numberofspace){
    string::iterator stringit;
    numberofspace=0;
    for(stringit=workstring.begin();stringit!=workstring.end();stringit++){//for(1)
        if((*stringit==' ') ||(*stringit==',') || (*stringit==';') || (*stringit=='-') || (*stringit==':')) {
            numberofspace++;}//end of for(1)
    }
}

void insertspace(string&workstring,string&maxstring,int numberofspace){
    int dlina=workstring.length();// длина строки
    int needtoinsert=maxstring.length()-dlina; // число пробелов сколько надо вставить
    int vstavka=needtoinsert/numberofspace; // сколько надо вставить в отверстие каждое 
    int dobavochka=needtoinsert%numberofspace; // сколько у нас остается потом пробелов
    string::iterator it;
    int n;
    it=workstring.begin();
    while(it!=workstring.end()){
        n=0;
        if(*it==' ' || *it==',' || *it==';' || *it=='-' || *it==':'){
            int m=vstavka%2;
            while(n<(vstavka/2)){
                it=workstring.insert(it,' ');
                it++;
                n++;}
            n=0;
            it++;
            while(n<(vstavka/2)+m){
                it=workstring.insert(it,' ');
                it++;
                n++;}
        }
        it++;
    }//endofwhile
    workstring.insert(workstring.find_first_of(' '),dobavochka,' ');
}

int main(){
    ifstream file;
    ofstream outfile;
    file.open("reader.txt");
    if(!file){
        cout<<"file doesnt exist/cannot be opened\n'";}
    else{
        outfile.open("newfile.txt");
        int numberoflines=0;
        string workstring;
        string maxstring;
        while(!file.eof()){
            getline(file,workstring);
            if(!workstring.empty()){
            searchformax(workstring,maxstring);
            numberoflines++;
            }//end of if`
        }//end of while !eof
        cout <<"number of lines " << numberoflines << endl;
        cout << " MAXSTRING:\n";
        cout <<maxstring << endl << endl;
        file.seekg(0);
        int k=0,numberofspace=0;
        while(!file.eof()){
        getline(file,workstring);
        if(!workstring.empty()){
            if(workstring.length() < maxstring.length()){
            searchspace(workstring,numberofspace);
            if(numberofspace){
                k++; // число строк которые обрабатываются
                insertspace(workstring,maxstring,numberofspace);}}//endofif
            cout << workstring << " " << endl;
            outfile << workstring << endl;}//end of if!empty
        }//end of while!eof
        cout << k << endl;
    }//end of else
    file.close();
    outfile.close();
    system("pause");
    return 0;
}

не знаю как правильно сделать функци. insertspace
PM MAIL   Вверх
Dmi3ev
Дата 6.3.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



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

Добавлено через 1 минуту и 42 секунды
http://forum.vingrad.ru/forum/topic-249185.html

Добавлено через 2 минуты и 35 секунд
вот она, выравнивает, да не просто выравнивает, а достаточно разумно это делает, можно даже свой символ заполнения задавать...)))

Добавлено через 4 минуты и 5 секунд
+ еще память там освобождать для пущей правильности всего этого дела можно.


--------------------

PM MAIL   Вверх
afanp
Дата 6.3.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Dmi3ev, 
сам себя не похвалишь - никто не похвалит smile 
спасибо большое 
PM MAIL   Вверх
Dmi3ev
Дата 6.3.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Dmi3ev, 
сам себя не похвалишь - никто не похвалит smile 
спасибо большое  

не понял?


--------------------

PM MAIL   Вверх
afanp
Дата 6.3.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Добавлено через 2 минуты и 35 секунд
вот она, выравнивает, да не просто выравнивает, а достаточно разумно это делает, можно даже свой символ заполнения задавать...)))

Добавлено через 4 минуты и 5 секунд
+ еще память там освобождать для пущей правильности всего этого дела можно.
это был не комплимент самому себе? тогда извини 
PM MAIL   Вверх
Dmi3ev
Дата 6.3.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

это был не комплимент самому себе? тогда извини  

это я тебе совет давал, что доработать, я же не вылизывал код, я сделала рабочий прототип, который нужно развить самому...))) там просто память выделяется, но не удаляется, поэтому и подсказал, чтобы ты внимание обратил.
а так, и правда, достаточно хорошая функция, при этом еще с коментами подробными... думаю, тебе будет полезно...


--------------------

PM MAIL   Вверх
afanp
Дата 6.3.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



я был бы очень признателен не саму функцию, а примерный метод обработки, дабы сделать самому. Если не сложно конечно
PM MAIL   Вверх
Dmi3ev
Дата 6.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

я был бы очень признателен не саму функцию, а примерный метод обработки, дабы сделать самому. Если не сложно конечно 

примерный метод обработки чего?


--------------------

PM MAIL   Вверх
afanp
Дата 6.3.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



каким образом добавлять элементы в строку с применением функции стрингов
PM MAIL   Вверх
Dmi3ev
Дата 6.3.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

каким образом добавлять элементы в строку с применением функции стрингов 

с помощью insert)))
а если серьезно, то тебе нужно разработать свой алгоритм, те саму логику надо задать, у меня логика была такая:
Допустим, есть строка: Я пошел гулять! ее длина 15.
для примера, нам надо ее растянуть на 30.
опять же повторюсь, что сейчас я рассказываю свой способ, а не рациональный алгоритм, который есть где-то там...
1) я разбиваю эту строку на слова, под словом понимается:
а) набор символов от пробела до пробела
б) если это начало, то от начала до пробела
в) если конец, то от пробела до конца
2) разбиваю согласно этому предписанию строку, получаю массив:
Я
пошел
гулять!
3) определяю длину всех полученных слов. в данном случае 13.
4) определяю, сколько мне нужно поставить пробелов, что строка стала нужной длины, в данном случае
30-13=17
5) начинаю ставить по очереди после каждого слова пробелы (кроме последнего), пока не поставлю их 17 штук, это мне гарантирует, что разница поставленных пробелов не будет больше 1
6) получаю массив (_=пробел)
Я_________
пошел________
гулять!
7) склеиваю все полученное и получаю (_=пробел)
Я_________пошел________гулять!


вот и все.... может есть другие рациональные, + еще возможности stl, но если требуется писать самому без использования наворотов, то этот алгоритм даже очень покатит...




Это сообщение отредактировал(а) Dmi3ev - 6.3.2009, 20:29


--------------------

PM MAIL   Вверх
afanp
Дата 6.3.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



так спасибо, а вот такой вопрос : 
у меня например есть строка 
"The roof the roof the roof   "
в конце которой несколько пробелов, как обезосаписть себя от считывания этих последних ненужных пробелов?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.3516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.