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

Удаление слов из текста - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ввод пути к файлу с консоли http://www.cyberforum.ru/cpp-beginners/thread861480.html
подскажите пожалуйста, вот как отрыть файл для работы с ним я знаю, но покрайней мере я делаю так FILE *f; f=fopen("input.txt","r"); а можно как что бы указывать путь к файлу с консоли, что нибуть такое FILE *f; string bs; cin >> bs; f=fopen("bs","r"); ну или вопще как такое реализовать, подскажите пожалуйста
C++ Среднее геометрическое С++ Вычислить среднее геометрическое для каждого элемента одномерного массива по следующему правилу : {b}_{i}=\sqrt{a(i)*a(2)*...*a(i)} \sqrt{a(i)*a(2)*...*a(i)} Использовать функцию вычисления среднего геометрического одномерного массива. http://www.cyberforum.ru/cpp-beginners/thread861478.html
Двуязычие приложения C++
Есть собственно С++ код работает все в консоли Не пойму как сделать что бы пользователь мог выбрать на каком языке будет отображаться текст программы на русском или на английском.. Выбор между ними, как создавать код, какие файлы применять!
Показ скрытого сообщения C++
Добрый день. Есть 2 класса 1-главный 2-второстепенный Когда перед пользователем появляется консоль в консоле можно зайти в меню 1 класса или во 2 класс. Если пользователь сразу из главного меню 1 и 2 класса зайдет во 2 класс то там ничего не будет Если пользователь зайдет в 1 класс и сделает такое действие "Нажмите клавишу "Y" чтобы удалить файл", после нажатия "Y" будет произведено некое...
C++ Выделение памяти под массив строк http://www.cyberforum.ru/cpp-beginners/thread861445.html
Вот нерабочий код и сейчас объясню, что пытаюсь сделать fstream f; f.open("in.txt", ios::in); int i=0, j=0; char **txt=(char**)malloc(1); while (!f.eof()) { txt=(char*)malloc(1); while(txt!='\n'){
C++ Сортировка по любому полю Обработать массив структур следующим образом: п.1) ввести элементы массива с клавиатуры(текущее количество эле- ментов массива вводится с клавиатуры (по соответствующему запросу) каждый раз после запуска программы); п.2) вывести на экран все элементы массива. Поля каждой структуры вывеси на экран в строку и получить таким образом на экране ... подробнее

Показать сообщение отдельно
Smith5989
4 / 4 / 0
Регистрация: 21.11.2012
Сообщений: 54

Удаление слов из текста - C++

11.05.2013, 18:14. Просмотров 630. Ответов 1
Метки (Все метки)

Добрый день!
есть задачка: Определить самое короткое слово в каждом предложении. Удалить эти слова из текста.Для обработки строк следует использовать функции стандартной библиотеки <cstring>.Примечание: следует использовать строки, представленные как массив символов. Строки, созданные с помощью классов (таких, как например, string из библиотеки STL) использовать запрещается.

У меня получился вот такой код
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
#include <iostream>
#include <cstring>
// нахождение минимального размера слова
int getMinSizeWord(char *text){
    // если придет слово больше 20 символов программа будет работать с ошибками, но слово в 20 символов маловероятно
    int sizeOfMinimalWord=20,k=0;
    // нахождение размера text
    int size=strlen(text);
    for(int i=0;i<size;++i){
    // подсчитываем количество символов в каждом слове
        if(text[i]!=' '||text[i]!=','||text[i]!='.'||text[i]!='!',text[i]!='?')
            ++k;
        /*как только приходит пробел или какой либо знак препинания, это означает что в текущем слове количество букв подсчитано
         во входной строке не будет несколько подряд идущих пробелов, позже будет отдельная функция которая будет решать проблему с пробелами*/
        if(text[i]==' '||text[i]==','||text[i]=='.'||text[i]=='!',text[i]=='?'){
            if(k<sizeOfMinimalWord)
                sizeOfMinimalWord=k;
            // обнуления счетчика количества символов, тк гарантированно дальше будет новое слово
            k=0;
        }
    }
    return sizeOfMinimalWord;
}
 
void deleteWord(char *text,int sizeOfDeletWord){
    char brokenText[1000][20],newText[1000];
    // нахождение размера text
    int size=strlen(text),
        ind=0,j=0;
    for(int i=0;i<size;++i){
        //заполнение  двумерного массива символами из text
        if(text[i]!=' '||text[i]!=','||text[i]!='.'||text[i]!='!',text[i]!='?'){
            brokenText[ind][j++]=text[i];
        }
        if(text[i]==' '||text[i]==','||text[i]=='.'||text[i]=='!',text[i]=='?'){
            //избавление от слов неподходящего размера
            if(strlen(brokenText[ind])!=sizeOfDeletWord){
                strcat_s(newText,brokenText[ind]);
                // добавление знаков препинания, что бы они не потерялись. 
                //похоже я не правильно использую эту функцию, видимо вместо i она добавляет по i
                //strncat_s(newText,text,i);
            }
            ++ind;
            j=0;
        }
    std::cout<<newText; 
    }
}
int main(){
    char textInMass[1000];
    char *text;
    text=gets_s(textInMass);
    int sizeOfMinimalWord=getMinSizeWord(text);
    deleteWord(text,sizeOfMinimalWord);
    return 0;
}
ошибка в функции удаления слова, подскажите пожалуйста как ее исправить?

Добавлено через 3 часа 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
#include <iostream>
#include <cstring>
// нахождение минимального размера слова
int getMinSizeWord(char *text){
    // если придет слово больше 200 символов программа будет работать с ошибками, но слово в 200 символов маловероятно
    int sizeOfMinimalWord=200,k=0;
    // нахождение размера text
    int size=strlen(text);
    for(int i=0;i<size;++i){
    // подсчитываем количество символов в каждом слове
        if(text[i]!=' '||text[i]!=','||text[i]!='.'||text[i]!='!'||text[i]!='?')
            ++k;
        /*как только приходит пробел или какой либо знак препинания, это означает что в текущем слове количество букв подсчитано
         во входной строке не будет несколько подряд идущих пробелов, позже будет отдельная функция которая будет решать проблему с пробелами*/
        if(text[i]==' '||text[i]==','||text[i]=='.'||text[i]=='!'||text[i]=='?'){
            if(k<sizeOfMinimalWord)
                sizeOfMinimalWord=k;
            // обнуления счетчика количества символов, тк гарантированно дальше будет новое слово
            k=0;
        }
    }
    return sizeOfMinimalWord;
}
 
void deleteWord(char *text,int sizeOfDeletWord){
    char brokenText[1000][20],newText[1000];
    // нахождение размера text
    int size=strlen(text),
        ind=0,j=0;
    for(int i=0;i<size;++i){
        //заполнение  двумерного массива символами из text
        if(text[i]!=' '||text[i]!=','||text[i]!='.'||text[i]!='!'||text[i]!='?'){
            brokenText[ind][j++]=text[i];
        }
        if(text[i]==' '||text[i]==','||text[i]=='.'||text[i]=='!'||text[i]=='?'){
            //избавление от слов неподходящего размера
            if(strlen(brokenText[ind])!=sizeOfDeletWord){
                brokenText[ind][j]='\0';
                strcat(newText,brokenText[ind]);
                // добавление знаков препинания, что бы они не потерялись. 
                //похоже я не правильно использую эту функцию, видимо вместо i она добавляет по i
                //strncat_s(newText,text,i);
            }
            ++ind;
            j=0;
        }
    }
    strcat(newText,'\0');
    std::cout<<newText; 
}
int main(){
    char textInMass[1000];
    char *text;
    text=gets_s(textInMass);
    int sizeOfMinimalWord=getMinSizeWord(text);
    deleteWord(text,sizeOfMinimalWord);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru