Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

подскажите с помощью каких функций это можно сделать, какой алгоритм действий
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 16:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переписать строки из одного файла во второй со смещением (C++):

Переписать строки с одного текстового файла в другой в обратном порядке - C++
Здравствуйте. Задача следующая : Имеется текстовый файл. Переписать его строки в другой файл. Порядок строк во втором файле должен...

Переписать текст исходного файла во второй файл, сохраняя строчную структуру и удаляя пустые строки - C++
Пусть дан текстовый файл f1. Перепишите его содержимое в файл f2, сохраняя строчную структуру и удаляя пустые строки.

Переписать из одного файла в другой только третью и четвертую строки, содержащие пробелы - C++
Из имеющегося файла a.txt, состоящего из 6 строк, переписать в файл b.txt третью и четвертую строки. Строки могут иметь пробелы. Пыталась...

Переписать с первого файла данные во второй файл, но по критериям - C++
Здравствуйте ещё раз. Помогите, пожалуйста, с самым сложным. Я написал в файл текст с цифрами. Например: My name is Peter. I`am 15 years...

Числа из одного файла переписать в другой - C++
Прошу написать прогу, чтобы читала из одного txt файла число и писала его в другой. Желательно стандартными функциями С++. Я сам пытался,...

Как переписать текст из одного файла в другой? - C++
Скажите, каким образом можно записать текст в текстовый файл, если текст считывается с другого текстового файла?

10
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
21.04.2013, 17:06 #2
приведите пример потому, что не понятно, что конкретно надо сделать
что подразумевается под циклическим сдвигом? вставка пробелов перед началом строки? или перед словом? или?
что если в строке два ключевых слова? она же не могут оба начинаться с одинаковой позиции
1
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 168
Завершенные тесты: 1
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"
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
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;
    }
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 168
Завершенные тесты: 1
22.04.2013, 17:06  [ТС] #5
Olivеr, ого. спасибо большое)
0
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;
    
    }
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
11.05.2013, 12:43 #7
Noreal, откуда я знаю. У меня компилятор MinGW 4.7.3 и все компилируется.
0
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
13.05.2013, 19:46 #8
Цитата Сообщение от Olivеr Посмотреть сообщение
Noreal, откуда я знаю. У меня компилятор MinGW 4.7.3 и все компилируется.
Если не сложно,можешь скинуть откомпилированную прогу в архиве ?
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 168
Завершенные тесты: 1
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, ошибок и предупреждений нет - ссылка
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
13.05.2013, 20:25 #10
Noreal,
MinGW 4.7.3
exe
На всякий случай
0
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
22.05.2013, 16:22 #11
Кто может написать коментарии к проге ?А то не все понимаю .
0
22.05.2013, 16:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2013, 16:22
Привет! Вот еще темы с ответами:

Переписать слова из одного файла в другой, разбив их строками - C++
Нужна не столько работающая программа, сколько объяснение, как это изобразить. Задание такое: В одном файле написаны слова через пробелы,...

Переписать символы из одного файла в друглй по n символов в строке - C++
Пожалуйста,срочно. Сформировать текстовый файл f1.Переписать символы из файла f1 в файл f2 по n символов в строке.

Бинарные файлы: считать данные из одного файла и переписать в другой - C++
необходимо считать данные из одного бинарника и переписать в другой объявление и запись if (checkBox3-&gt;Checked) { ...

Переписать из одного файла в другой информацию о кубиках согласно условию - C++
Сформировать файл К, содержащий информацию о кубики: размер каждого кубика (длина ребра в см.); цвет (красный, желтый, зеленый или синий),...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.