Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 149
#1

Переписать строки из одного файла во второй со смещением - C++

21.04.2013, 16:54. Просмотров 854. Ответов 10
Метки нет (Все метки)

Задано натуральное число k, символьный файл g и текстовый файл f. Файл g содержит 30 слов, каждое из которых будем называть ключевым. Сформировать файл ff, содержащий строки файла f, циклически сдвинутые так, чтобы каждое ключевое слово, которое входит в строку, начиналось с k-й позиции. Строки, не содержащие ключевых слов в файл ff не включаются.

подскажите с помощью каких функций это можно сделать, какой алгоритм действий
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 16:54     Переписать строки из одного файла во второй со смещением
Посмотрите здесь:

Как переписать текст из одного файла в другой? C++
C++ Числа из одного файла переписать в другой
C++ Переписать из одного файла в другой только третью и четвертую строки, содержащие пробелы
C++ Переписать слова из одного файла в другой, разбив их строками
C++ Переписать из одного файла в другой информацию о кубиках согласно условию
C++ Бинарные файлы: считать данные из одного файла и переписать в другой
C++ Переписать текст исходного файла во второй файл, сохраняя строчную структуру и удаляя пустые строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.04.2013, 17:06     Переписать строки из одного файла во второй со смещением #2
приведите пример потому, что не понятно, что конкретно надо сделать
что подразумевается под циклическим сдвигом? вставка пробелов перед началом строки? или перед словом? или?
что если в строке два ключевых слова? она же не могут оба начинаться с одинаковой позиции
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 149
21.04.2013, 18:15  [ТС]     Переписать строки из одного файла во второй со смещением #3
Olivеr, скорее всего вставка пробелов. это все что есть в задании, сам не очень понял...
подразумевается что ключевое слово может либо быть либо нет (только одно)

например в файле с ключевыми словами "one two three four five...", а в файле с текстом строки
"There was one tree"
"There was no tree"
"I have six dollars"
"I have no money"


тогда в файл ff должны записаться строки со смещением от ключевых слов, например смещение k = 3, тогда должно записаться
"as one tree"
"ve six dollars"


или например смещение k = 5, тогда
" was one tree"
"have six dollars"
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.04.2013, 20:22     Переписать строки из одного файла во второй со смещением #4
Хорошо. Сейчас попробуем.

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>
 
using namespace std;
 
//функция выдирает слова из строки и проверяет являются ли они ключевыми
//хотя это можно сделать и через строковые потоки
string::size_type testString(string &str, const vector<string> &vec)
{
    str.push_back(' ');
 
    for(size_t wordlen(0),i = 0; i != str.size(); i++) {
        if (isalpha(str[i]))
            ++wordlen;
        else {
            if (!wordlen)
                continue;
            if (str[i]=='-' && isalpha(str[i+1])) {
                ++wordlen;
                continue;
            }
            unsigned wordstart = i - wordlen;
            string word(str.substr(wordstart,wordlen));
            wordlen = 0;
 
            if ( find(vec.begin(), vec.end(), word) != vec.end() ) {
                str.resize(str.size() - 1);
                return wordstart;
            }
        }
    }
    return string::npos;
}
 
int main()
{
    setlocale(LC_CTYPE, "");
    ifstream strings("f.txt"), _words("g.txt");
    ofstream out_strings("ff.txt");
 
    if (!strings || !_words) return -1;
 
    unsigned k = 5;
    unsigned wordsCount(0);
 
    vector<string> words(100);
 
    while ( !_words.eof() ) {
        getline(_words, words[wordsCount]);
        ++wordsCount;
    }
 
    words.resize(wordsCount);
 
    _words.close();
 
    string str;
 
    while ( !strings.eof() ) {
        getline(strings, str);
        string::size_type pos = testString(str, words);
        if (pos == string::npos)
            continue;
        str.erase(0, pos - k);
        out_strings << str << endl;
    }
    out_strings.close();
    strings.close();
    return 0;
}
Добавлено через 11 минут
небольшая поправочка для цикла while:
C++
1
2
3
4
5
6
7
8
9
10
11
    while ( !strings.eof() ) {
        getline(strings, str);
        string::size_type pos = testString(str, words);
        if (pos == string::npos)
            continue;
        if (k > pos)
            str.insert(0, k, ' ');
        else if (pos - k > 0)
                str.erase(0, pos - k);
        out_strings << str << endl;
    }
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 149
22.04.2013, 17:06  [ТС]     Переписать строки из одного файла во второй со смещением #5
Olivеr, ого. спасибо большое)
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
11.05.2013, 12:30     Переписать строки из одного файла во второй со смещением #6
почему в этом коде С++ жалуется на " str.insert(0, k, ' ');"
C++
1
2
3
4
5
6
7
8
9
10
11
12
   while ( !strings.eof() ) {
        getline(strings, str);
        string::size_type pos = testString(str, words);
        if (pos == string::npos)
            continue;
        if (k > pos)
            str.insert(0, k, ' ');
        else if (pos - k > 0)
                str.erase(0, pos - k);
        out_strings << str << endl;
    
    }
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.05.2013, 12:43     Переписать строки из одного файла во второй со смещением #7
Noreal, откуда я знаю. У меня компилятор MinGW 4.7.3 и все компилируется.
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
13.05.2013, 19:46     Переписать строки из одного файла во второй со смещением #8
Цитата Сообщение от Olivеr Посмотреть сообщение
Noreal, откуда я знаю. У меня компилятор MinGW 4.7.3 и все компилируется.
Если не сложно,можешь скинуть откомпилированную прогу в архиве ?
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 149
13.05.2013, 20:12  [ТС]     Переписать строки из одного файла во второй со смещением #9
Noreal,
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
 
string::size_type testString(string &str, const vector<string> &vec)
{
    str.push_back(' ');
    for(size_t wordlen(0),i = 0; i != str.size(); i++) 
    {
        if (isalpha(str[i]))
            ++wordlen;
        else 
        {
            if (!wordlen)
                continue;
            if (str[i]=='-' && isalpha(str[i+1])) 
            {
                ++wordlen;
                continue;
            }
            unsigned wordstart = i - wordlen;
            string word(str.substr(wordstart,wordlen));
            wordlen = 0;
            if (find(vec.begin(), vec.end(), word) != vec.end())
            {
                str.resize(str.size() - 1);
                return wordstart;
            }
        }
    }
    return string::npos;
}
 
int main(void)
{
    setlocale(LC_ALL, "");
    ifstream strings("f.txt"), _words("g.txt");
    ofstream out_strings("ff.txt");
    string str;
 
    if (!strings || !_words) 
        return -1;
 
    unsigned int k = 3;
    unsigned int wordsCount = 0;
 
    vector <string> words(100);
 
    while (!_words.eof()) 
    {
        getline(_words, words[wordsCount]);
        ++wordsCount;
    }
    words.resize(wordsCount);
    _words.close();
 
    while (!strings.eof())
    {
        getline(strings, str);
        string::size_type pos = testString(str, words);
        if (pos == string::npos)
            continue;
        if (k > pos)
            str.insert(0, k, ' ');
        else if (pos - k > 0)
                str.erase(0, pos - k);
        out_strings << str << endl;
        cout << str << endl;
    }
    out_strings.close();
    strings.close();
    system("pause");
}

откомпилировано в VS2010, ошибок и предупреждений нет - ссылка
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.05.2013, 20:25     Переписать строки из одного файла во второй со смещением #10
Noreal,
MinGW 4.7.3
exe
На всякий случай
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2013, 16:22     Переписать строки из одного файла во второй со смещением
Еще ссылки по теме:

C++ Переписать символы из одного файла в друглй по n символов в строке
C++ .Переписать все слова из одного файла в другой в алфавитном порядке
C++ Переписать строки с одного текстового файла в другой в обратном порядке

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
22.05.2013, 16:22     Переписать строки из одного файла во второй со смещением #11
Кто может написать коментарии к проге ?А то не все понимаю .
Yandex
Объявления
22.05.2013, 16:22     Переписать строки из одного файла во второй со смещением
Ответ Создать тему
Опции темы

Текущее время: 01:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru