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

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

Войти
Регистрация
Восстановить пароль
 
avraal
7 / 7 / 3
Регистрация: 08.11.2014
Сообщений: 183
Записей в блоге: 1
#1

В каждой строке файла удалить среднее слово - C++

30.06.2015, 23:10. Просмотров 343. Ответов 10
Метки нет (Все метки)

В каждой строке файла удалить среднее слово, результат записать в файл

Например, в строке 7 слов - удалить 4 слово
Если 6 слов, то удалить третье

Помогите сделать задание
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 23:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В каждой строке файла удалить среднее слово (C++):

Удалить в каждой строке текстового файла последнее слово - C++
Выполнить обработку текстового файла. Определить кол-во предложений в исходном тексте.как реализовать ?Удалить в каждой строке последнее...

Для каждой строки файла удалить среднее слово; результат записать в файл (файловый ввод/вывод) - C++
для каждой строки файла удалить среднее слово. результат записать в файл

В каждой строке удалить второе слово - C++
Ребята, нужна помощь. Нужно иметь N-ое кол-во строк и вводить это кол-во с клавиатуры, но не больше 20. Дальше вводим каждую строку, позже...

В каждой строке текста удалить второе слово - C++
Привет всем, у меня вопрос. Нужно ввести 20 строк из 128 символов (максимум, неважно какое кол-во символов), но в каждой строке нужно...

В каждой второй строке удалить третье слово, если такое есть - C++
Добрый день! Ребята срочно нужна помощь,буду признателен,нужно в С++ разработать программу следующего условия: В каждой второй строке...

Для каждой строки файла переставить первое и среднее слово - C++
Помогите пожалуйста!!! не знаю с чего начать... необходимо для каждой строки файла переставить первое и среднее слово. Результат...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
30.06.2015, 23:11 #2
Полностью сделать задание?
avraal
7 / 7 / 3
Регистрация: 08.11.2014
Сообщений: 183
Записей в блоге: 1
30.06.2015, 23:15  [ТС] #3
Это всё что есть
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
30.06.2015, 23:18 #4
avraal, Что вы сделали сами?
avraal
7 / 7 / 3
Регистрация: 08.11.2014
Сообщений: 183
Записей в блоге: 1
30.06.2015, 23:32  [ТС] #5
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
#include <iostream>
#include <conio>
#include <fstream>
 
using namespace std;
 
struct slova{
        char text[20];
        int pos;
};
 
int main()
{
        slova slovo;
        slovo.pos = 0;
        char *ptr;
        ofstream outfile;
        ifstream infile;
        outfile.open("File1.txt", ios::out);
        if(!outfile)
        {
                cout<<"File ne sozdan"<<endl;
                getch();
        }else
        {
                cout<<"Vvodite text(^Z - zavershit vvod)"<<endl;
                while(!cin.eof())
                {
                        cin>>slovo.text;
                        slovo.pos++;
                        outfile.write((char*)&slovo, sizeof(slovo));
                }
        }
        outfile.close();
        cout<<"Najmite lubuyu klavishu dlya prodoljenia";
        getch();
        cout<<endl;
 
        infile.open("File1.txt", ios::ate);
        if(!infile)
        {
                cout<<"File ne sozdan"<<endl;
                getch();
        }else
        {
                while(!infile.eof())
                {
                        infile.read((char*)&slovo, sizeof(slovo));
                        cout<<"Text: "<<slovo.text<<endl;
                        cout<<"Pos: "<<slovo.pos<<endl;
                }
                infile.close();
        }
 
        cout<<"Najmite lubuyu klavishu"<<endl;
        getch();
        return 0;
}
Добавлено через 7 минут
Но дальше я не знаю
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
30.06.2015, 23:33 #6
Осталось оформить запись в файл?
avraal
7 / 7 / 3
Регистрация: 08.11.2014
Сообщений: 183
Записей в блоге: 1
30.06.2015, 23:43  [ТС] #7
Надо как-то определить какое слово среднее и удалить
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
30.06.2015, 23:52 #8
avraal, Занеси строку в массив. Подели строку на лексемы и занеси в новый массив. Определи размер нового массива. Если размер равен чётному числу - находи средний элемент и удаляй его. Если не чётный - размер уменьшай на 1 и удаляй элемент массива. Потом выводи массив в файл.

Добавлено через 2 минуты
Приблизительно:
C++
1
2
3
4
5
6
7
8
9
char arr[256];
char *word = strtok(str, " ,!.;");  
int wordCounter = 0;
while (word != 0)
{
    strcpy(arr[wordCounter], word); 
    word = strtok(0, " ,!.;");
    wordCounter++;
}
avraal
7 / 7 / 3
Регистрация: 08.11.2014
Сообщений: 183
Записей в блоге: 1
30.06.2015, 23:52  [ТС] #9
Я бы не написал сюда, если бы смог это сам реализовать..
ThePlague
101 / 101 / 61
Регистрация: 30.06.2015
Сообщений: 272
01.07.2015, 04:29 #10
Вот отрыл у себя в загашнике, сто лет назад писал вроде работало.
Почти так как ты хотел, с одной только поправкой тут все на оборот все слова удаляются кроме искомого.
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    ifstream inFile("FILE.txt");
    ofstream outFile("FILE2.txt");
 
    if(!inFile)
    {
        cerr << "ERROR: Cannot open 'FILE.txt'!" << endl;
        exit(1);
    }
    string line, tmp;
    vector<string> myArray;
    int counter=0;
    int numspaces=0;
    while (getline(inFile,line))
    {
        for (int i=0; i<int(line.length()); i++)
        {
            tmp = tmp + line[i];
            if (line[i]==(' '))
            {
                myArray.push_back(tmp);
                numspaces++;
                tmp = "";
            }
                
        }
        if(numspaces < 3)
        {
 
            cout << myArray.front() << endl;
        }
        else
        {
            if(numspaces%2==0)
            {
                cout << myArray[(numspaces/2)-1] << endl;
            }
            else
            {
                cout << myArray[(numspaces/2)] << endl;
            }
        }
        numspaces = 0;
        myArray.clear();
    }
    return(0);
}

З.Ы: Суть я думаю тебе будет ясна, немного подправить и готово.
Геомеханик
618 / 425 / 309
Регистрация: 26.06.2015
Сообщений: 961
01.07.2015, 15:02 #11
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
77
78
79
80
81
82
83
#include <iostream>
#include <fstream>
#include <strstream>
#include <cctype>
#include <string>
 
 
//кол-во слов в строке
int count_words(const char* s){
    int n = 0;
    while(*s){
        while(*s && ! isalnum(*s))
            ++s;
        if(isalnum(*s)){
            ++n;
            while(isalnum(*s))
                ++s;
        }
    }
    return n;
}
 
//удаление слова
void remove_avg(std::string& s){
    int inx;
    int cnt = count_words(s.c_str());
    if(cnt <= 2)
        return;
 
    cnt = (cnt + 2) / 3;
    inx = 0;
 
    const char* i, *p = s.c_str();
    while(*p){
        while(*p && ! isalnum(*p))
            ++p;
 
        if(isalnum(*p)){
            i = p + 1;
            while(isalnum(*i))
                ++i;
 
            if(inx++ >= cnt){
                s.erase((p - s.c_str()), i - p);
                break;
            }
            p = i;
        }
    }
}
 
 
//удаление среднего слова
void output_rem(std::ostream& _o, std::istream& _i){
    std::string l;
    while((! _i.eof()) && (! _i.fail())){
        std::getline(_i, l);
        if(l.length() > 0){
            remove_avg(l);
            _o << l << std::endl;
        } else
            _o << std::endl;
    }
    _o.flush();
}
 
 
int main(void){
    char s[] = "fox dog bat cat wolf bea cow\r\n"\
               "AA BB CC DD EE FF\r\n"\
               "A1 B2 C3 D4 C5";
    std::istrstream ist(s);
    output_rem(std::cout, ist);
 
/*  вот работать с файлом
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    output_rem(fout, fin);
    fin.close();
    fout.close();
*/
    return 0;
}
Результат работы кода
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 15:02
Привет! Вот еще темы с ответами:

Для каждой строки файла удалить короткое слово - C++
Для каждой строки файла удалить короткое слово. Результат записать в файл. FILE *f1,*f2; f1=fopen(&quot;F1.txt&quot;,&quot;rt&quot;); ...

Найти среднее арифметическое последних 5 чисел, в каждой строке файла - C++
Всем привет! столкнулся с проблемой при обработке данных из текстового файла: Допустим есть такой файл, состоящий минимум из 3х...

Скопировать содержимое текстового файла, удалив в каждой строке слово номер N+1, если в слове N есть 4 - C++
Здравствуйте. Помогите, пожалуйста, в написании программы Скопировать содержимое текстового файла, удалив в каждой строке слово номер...

Удалить в каждой строке лишние пробелы; исходную информацию считать из текстового файла - C++
Пусть задано множество строк. Удалить в каждой строке лишние пробелы. Пробел считается лишним, если он 1) стоит в начале строки ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.07.2015, 15:02
Ответ Создать тему
Опции темы

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