Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как быть

1.9K
17 апреля 2006 года
imported_ФДУЧ
104 / / 07.04.2005
по тексту все подписано
Задача надо заполнить массив

#include <iostream.h>
#include <fstream.h>
#include <string.h>

struct MyChar{
char rus[25];
char eng[25];
};

char temp[60];
int n = 0;
char next;
int t = 0;

int main(int argc, char* argv[])
{

ifstream input_num("Data.dat");
while(input_num.getline(temp,1500)) //Считаем количество строк
{n++;
}
input_num.close();
ifstream input("Data.dat");
typedef MyChar* array_my; //создаём массив структуры
array_my array;
array = new MyChar[n];
if(array == NULL)
{
cout<<"Error: Not free memmore";
}
//--------------------------------------------------------------------------------------------------------------------

/ / должен читаться поток input т.е. файл первое слово до пробела пишется в eng, после
//пробела в rus т.е. в строчке только два слова разделённые пробелом после символа конца строки /0 заполняется следующая ячейка массива
for(int x = 0; x < n; x++)
{char w =' ';

int z = 0;
do{
input.get(next);
if(next != ' ')
{
array[x].eng[z] = next;
}

z++;
}while(next == ' ');

/* z = 0;
do{
input.get(next);
if(next != '\n')
{
array[x].rus[z] = next;
}
z++;
}while(next == '\n');
*/
}

//-------------------------------------------------------чисто для проверки
cout<<n<<endl;
cout<<array[0].eng[0]<<endl;
cout<<array[0].eng[1]<<endl;
cout<<array[0].eng[2]<<endl;
cout<<array[0].eng[3]<<endl;
cout<<array[0].eng[4]<<endl;
cout<<array[0].eng[5]<<endl;

cout<<array[0].rus[0]<<endl;
cout<<array[0].rus[1]<<endl;
cout<<array[0].rus[2]<<endl;
cout<<array[0].rus[3]<<endl;
cout<<array[0].rus[4]<<endl;
cout<<array[0].rus[5]<<endl;

cout<<array[1].eng[0]<<endl;
cout<<array[1].eng[5]<<endl;

cout<<"Hellow"<<endl;


//-------------------------------------------------------------

input.close();
delete [] array;
return 0;

}
324
17 апреля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by ФДУЧ
по тексту все подписано
Задача надо заполнить массив
}



А в чем проблема?

1.9K
17 апреля 2006 года
imported_ФДУЧ
104 / / 07.04.2005
Цитата:
Originally posted by AndreySar
А в чем проблема?


этот участок не работает

for(int x = 0; x < n; x++)
{char w =' ';

int z = 0;
do{
input.get(next);
if(next != ' ')
{
array[x].eng[z] = next;
}

z++;
}while(next == ' ');

/* z = 0;
do{
input.get(next);
if(next != '\n')
{
array[x].rus[z] = next;
}
z++;
}while(next == '\n');
*/
}

3
17 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ФДУЧ
struct MyChar{
char rus[25];
char eng[25];
};


Зачем при использовании STL использовать C-strings?

Цитата:
Originally posted by ФДУЧ

ifstream input_num("Data.dat");
while(input_num.getline(temp,1500)) //Считаем количество строк
{n++;
}

typedef MyChar* array_my; //создаём массив структуры
array_my array;
array = new MyChar[n];


Зачем? Ведь существуют стандартные контейнеры?

Цитата:
Originally posted by ФДУЧ

/ / должен читаться поток input т.е. файл первое слово до пробела пишется в eng, после
//пробела в rus т.е. в строчке только два слова разделённые пробелом после символа конца строки /0 заполняется следующая ячейка массива
for(int x = 0; x < n; x++)
{char w =' ';

int z = 0;
do{
input.get(next);
if(next != ' ')
{
array[x].eng[z] = next;
}

z++;
}while(next == ' ');

/* z = 0;
do{
input.get(next);
if(next != '\n')
{
array[x].rus[z] = next;
}
z++;
}while(next == '\n');
*/
}


Зачем так сложно? Ведь у тебя есть потоки!

Цитата:
Originally posted by ФДУЧ

//-------------------------------------------------------чисто для проверки
cout<<n<<endl;
cout<<array[0].eng[0]<<endl;
cout<<array[0].eng[1]<<endl;
cout<<array[0].eng[2]<<endl;
cout<<array[0].eng[3]<<endl;
cout<<array[0].eng[4]<<endl;
cout<<array[0].eng[5]<<endl;

cout<<array[0].rus[0]<<endl;
cout<<array[0].rus[1]<<endl;
cout<<array[0].rus[2]<<endl;
cout<<array[0].rus[3]<<endl;
cout<<array[0].rus[4]<<endl;
cout<<array[0].rus[5]<<endl;

cout<<array[1].eng[0]<<endl;
cout<<array[1].eng[5]<<endl;

cout<<"Hellow"<<endl;


Вот ты уже в плотную подошел к unitesting-у, только зачем для тестовой системы использовать такое ненадежное звено, как человек? Поручи тестирование машине!

А теперь такой вариант решения твоей задачи:

Код:
#include <string>
#include <list>
#include <fstream>

using namespace std;

struct MyChar {
    string rus;
    string eng;
};

typedef list<MyChar> MyChars;


int main()
{
    MyChars myChars;

    ifstream input("Data.dat");
    if(!input.is_open()) return -1;

    while( !input.eof() ) {
        MyChar tmp;
        input >> tmp.eng >> tmp.rus;
        if( !tmp.eng.empty() && !tmp.rus.empty() ) {
            myChars.push_back(tmp);
        }
    }

    return 0;
}
1.9K
18 апреля 2006 года
imported_ФДУЧ
104 / / 07.04.2005
Цитата:

Код:
#include <string>
#include <list>
#include <fstream>

using namespace std;

struct MyChar {
    string rus;
    string eng;
};

typedef list<MyChar> MyChars;


int main()
{
    MyChars myChars;

    ifstream input("Data.dat");
    if(!input.is_open()) return -1;

    while( !input.eof() ) {
        MyChar tmp;
        input >> tmp.eng >> tmp.rus;
        if( !tmp.eng.empty() && !tmp.rus.empty() ) {
            myChars.push_back(tmp);
        }
    }

    return 0;
}



можно дописать сюда как проверить что считалось

(наверно книги по которым я учусь совсем старые может ссылка есть где качнуть не просто книгу а САМОУЧИТЕЛЬ с вопросами и задачами и ответами на них)

3
19 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ФДУЧ
можно дописать сюда как проверить что считалось


Тебя интересует модульное тестирование или просто как достать данные из полученных структур?

Второе проще, поэтому покажу прямо сейчас. Пример, как пройтись по контейнеру итератором:

 
Код:
for(MyChars::iterator it = myChars.begin(); it != myChars.end(); ++it) {
   cout << it->eng << " : " << it->rus << endl;
}

Если нужен индексный доступ, то используем контейнер std::vector, а не std::list:
Код:
#include <string>
#include <vector>
#include <fstream>

using namespace std;

struct MyChar {
    string rus;
    string eng;
};

typedef vector<MyChar> MyChars;


int main()
{
    MyChars myChars;

    ifstream input("Data.dat");
    if(!input.is_open()) return -1;

    while( !input.eof() ) {
        MyChar tmp;
        input >> tmp.eng >> tmp.rus;
        if( !tmp.eng.empty() && !tmp.rus.empty() ) {
            myChars.push_back(tmp);
        }
    }

    for(int i=0; i<myChars.size(); ++i) {
           cout << myChars.eng << " : " << myChars.rus << endl;
    }

    return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог