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

Нахождение слов определенной длины в тексте - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ разобраться с теорией http://www.cyberforum.ru/cpp-beginners/thread759510.html
Всем доброго времени суток, в билете по информатике, есть такие вопросы, на которые не имею представления ка отвечать. помогите пожалуйста или подскажите как загуглить что бы найти именно нужную...
C++ Нахождение максимального и минимального числа Здравствуйте. Помогите найти максимальное и минимальное число #include <iostream> using namespace std; int main() { time_t t; srand((unsigned) time(&t)); http://www.cyberforum.ru/cpp-beginners/thread759485.html
C++ Помогите найти ошибку в программе (Сгенерировать 10 случайных чисел в интервале 14 – 23)
Сгенерировать 10 случайных чисел в интервале 14 – 23. что не так в программе? #include <iostream> #include <ctime> using namespace std; int main() {
вычислить корень C++
По введённому х вычислите корень из (13 х + 22 х)
C++ Периметр и площадь прямоугольного треугольник http://www.cyberforum.ru/cpp-beginners/thread759478.html
Заданы длины катетов a и b прямоугольного треугольника. Найти его периметр и площадь. Input Первая строка стандартного потока ввода содержит количество тестов Т. Каждый тест - это два целых...
C++ сложить смежные пары вектора Здравствуйте! Нужна небольшая помощь, разобраться с задачей с использованием векторов. Собственно задача: Прочитайте в вектор набор целых чисел. Вычислите и отобразите сумму каждой пары смежных... подробнее

Показать сообщение отдельно
AKruglyak
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 24

Нахождение слов определенной длины в тексте - C++

12.01.2013, 14:11. Просмотров 292. Ответов 1
Метки (Все метки)

Добрый день, столкнулся с проблемой следующего характера. Нужно выписать из текста все слова длины 5. Не долго думая, я написал такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <string>
using namespace std;
fstream cin("input.txt");
ofstream cout("output.txt");
int main(){
    string s,s1;
    while(getline(cin,s))
        s1+=s;
    int count=0;    
    for(int i=3;i<s1.size();i++){
        if(s1[i-3]==' ' and s1[i+3]==' ')
            cout<<s1[i-2]<<s1[i-1]<<s1[i]<<s1[i+1]<<s1[i+2]<<endl;
    }
}
Но сразу понял свою ошибку. Выводились так же слова вида ****?, где ? любой знак препинания. И с несколькими пробелами впереди или по середина, например "Он до". Можно ли исправить данную проблему, напрямую не указывая, что каждый символ не должен быть пробелом или знаком препинания? Если нет, то как реализовать это наиболее эффективно?

Добавлено через 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
#include <fstream>
#include <string>
using namespace std;
fstream cin("input.txt");
ofstream cout("output.txt");
bool check(char g){
    if(g!=' ' and g!=',' and g!='.' and g!=';' and g!='-' and g!=':' and g!='?' 
    and g!='!' and g!='"')
        return true;
    else 
        return false;   
}
int main(){
    string s,s1;
    while(getline(cin,s))
        s1+=s;
    int count=0;    
    for(int i=3;i<s1.size();i++){
        if(s1[i-3]==' ' and s1[i+3]==' '){
            string f;
            bool m=true;
            for(int j=i-2;j<=i+2;j++){
                f+=s1[j];
                if(!check(s1[j]))
                    m=false;
            }
            if(m)
                cout<<f<<endl;
                
        }
        
            
    }
}
Но всё равно интересно, можно ли решить проще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru