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

Поиск:

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


Шустрый
*


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

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



Просьба откликнуться всем кто может помочь. Суть задачи в том, чтобы выровнять все строки по длине, но это не вызывает у меня трудностей. Когда я второй раз начинаю считать файл сначала, не всегда работают функции, а также getline определяет пустую строку  smile 
Код

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
void searchformax(string&workstring,int&max,string&maxstring){ // ищем максимальную строку 
    int length=workstring.length();
    if(length>max) {
        maxstring.clear();
        max=workstring.length();
        maxstring.assign(workstring);
    }
}

void searchforspace(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 insertvar(string&workstring,int&numberofspace,int&max){
    int dlina=workstring.length();// длина строки
    int needtoinsert=max-dlina; // число пробелов сколько надо вставить
    int vstavka=needtoinsert/numberofspace; // сколько надо вставить в отверстие каждое 
    int dobavochka=needtoinsert%numberofspace; // сколько у нас остается потом пробелов
    string::iterator it;
    int n=0;
    it=workstring.begin();
    while(it!=workstring.end()){
        n=0;
        if(*it==' '||*it=='-'||*it==';'||*it==':'||*it==','){
            while(n<vstavka/2){//вставляем nn-ое число пробелов
                it=workstring.insert(it,' ');
                it++;
                n++;}
            n=0;
            it++;
            while(n<vstavka/2){
                it=workstring.insert(it,' ');
                it++;
                n++;}
        }//end of if
        it++;} // end of the greater while
            int determine=workstring.find_first_of(' ');
            workstring.insert(workstring.begin()+determine,dobavochka,' ');
    cout << workstring << endl;}//end of function

int main(){
    ifstream file;
    file.open("test.txt");
    if(!file){
        cout <<"file doesnt exist/cannot be opened\n'";}
    else{//else(1)
        int numberofspace=0; // число пробелов в строке хранится здесь
        string workstring;
        string maxstring;
        cout << "file open\n";
        int max=1;
        while(!file.eof()){//while(1)
            getline(file,workstring);
            if(!workstring.empty()){//(if1)
            searchformax(workstring,max,maxstring); //ищем максимальную строку
            }//if(1) 
            if(file.eof()) {
            cout << "max length of line " << max << endl;
            cout << maxstring << endl;
            }
        }//end ofwhile(1)
    file.seekg(0);
    int k=0;
    while(!file.eof()){//while(2)
        getline(file,workstring);
        if(!workstring.empty()){
            k++;
        int length=workstring.length();
        if(length<max){
            searchforspace(workstring,numberofspace); // ищем пробелы в строке    
            if(numberofspace){
                insertvar(workstring,numberofspace,max);}
        }//if ne max
        }//!if.empty
    }//while2
    cout << " number of lines" << k << endl;
    }
    file.close();
system("pause");
return 0;
}

в частности, смотрел файл с этими строками :
Burn motherfucker burn
the roof the roof is on fire

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


depict1
****


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

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



жесть! у тебя в коде почти нет пробелов! попробуй написать ещё в одну строчку весь исходник  smile

замени это:
Код
file.seekg(0);

на это:
Код

file.clear();
file.seekg(0);

вдруг поможет.


Не забудь выучить стих А.Блока в файле file.txt  smile :
Код
#include "stdafx.h"
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>

using namespace std;

bool UDgreater (string &elem1, string &elem2)
{
   return elem1.size() > elem2.size();
}


int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> vs;
    ifstream in("file.txt");

    string str;
    while (getline(in, str))
        vs.push_back(str);
    
    sort(vs.begin(), vs.end(), UDgreater);

    return 0;
}





Это сообщение отредактировал(а) zim22 - 3.3.2009, 20:26

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  file.txt 0,61 Kb


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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