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

дан код, не компилируется - C++

Восстановить пароль Регистрация
 
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
11.05.2013, 12:35     дан код, не компилируется #1
Задано натуральное число k, символьный файл g и текстовый файл f. Файл g содержит 30 слов, каждое из которых будем называть ключевым. Сформировать файл ff, содержащий строки файла f, циклически сдвинутые так, чтобы каждое ключевое слово, которое входит в строку, начиналось с k-й позиции. Строки, не содержащие ключевых слов в файл ff не включаются.

Проблема в том,что жалуется на str.insert(0, k, ' ');

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 <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;
        if (k > pos)
            str.insert(0, k, ' ');
        else if (pos - k > 0)
                str.erase(0, pos - k);
        out_strings << str << endl;
    }
    out_strings.close();
    strings.close();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 12:35     дан код, не компилируется
Посмотрите здесь:

C++ Код не компилируется
Не компилируется код C++
В формате .cpp код компилируется, а в .c не компилируется C++
C++ Не компилируется код
C++ Код не компилируется
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.05.2013, 12:48     дан код, не компилируется #2
можно же хотя бы не поленится и написать какой компилятор...
Переписать строки из одного файла во второй со смещением
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 13:01     дан код, не компилируется #3
Noreal, а какую ошибку выдает?

Добавлено через 3 минуты
Цитата Сообщение от Noreal Посмотреть сообщение
str.insert(0, k, ' ');
может быть вот так:

C++
str.insert(k, 1, ' '); // добавит один пробел через k символов от начала строки
Добавлено через 5 минут
C++
string str("програма");
 
str.insert(7, 1, 'м');
cout << str << endl; // программа
Noreal
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 43
11.05.2013, 19:43  [ТС]     дан код, не компилируется #4
programina,теперь прогу компилирует,но у меня в файл FF не выводит данные..
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.05.2013, 19:59     дан код, не компилируется #5
Noreal, наверно вот здесь срабатывает проверка и str стирается
C++
        else if (pos - k > 0)
                str.erase(0, pos - k);
Добавлено через 2 минуты
или еще что-нибудь.

значит, где-то логика нарушена
Yandex
Объявления
11.05.2013, 19:59     дан код, не компилируется
Ответ Создать тему
Опции темы

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