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

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

Войти
Регистрация
Восстановить пароль
 
artscorp
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 11
#1

ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ - C++

16.05.2011, 18:41. Просмотров 726. Ответов 15
Метки нет (Все метки)

помогите, написать код программы, экзамен скоро, очень надо.
Нужно определить количество слов, начинающихся с буквы "c"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 18:44     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #2
как разделяются слова в строке?

Добавлено через 2 минуты
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
using std::string;
 
int main()
{
    string s; vector <string> ss;
    int i, j, l, p = 0;
 
    getline(cin, s);
 
    l = s.length();
 
    while (p < l)
    {
        while (p < l && !isalpha(s[p])) p++;
        i = p + 1;
        while (i < l && isalpha(s[i])) i++;
        ss.push_back(s.substr(p, i - p));
        p = i;
    }
 
    for (i = 0; i < ss.size() - 1; i++)
        if (ss[i][0] == 'c') cout << ss[i] << endl;
 
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.05.2011, 18:48     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #3
iama, Ну это ад аще
C++
1
2
using namespace std;
using std::string;
Еще варик.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>
#include <boost/algorithm/string/split.hpp>
 
bool isDelim(char c)
{
    return isspace(c) || ispunct(c);
}
 
int main()
{
    char symbol = 'c';
    std::string string;  
    std::getline(std::cin, string);
    std::vector<std::string> vec;
    boost::split(vec, string, isDelim, boost::compress_token_on);
    std::cout << std::count_if(vec.begin(), vec.end(), [symbol](const std::string& str) {return *str.begin() == symbol;});
}
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 18:51     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #4
ForEveR, а чо, у меня какой-то компилятор (сейчас не могу вспомнить какой), без этого строки кушать отказывался
Mиxaил
531 / 436 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
16.05.2011, 18:52     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #5

Не по теме:

Да, это сильно! =)



iama, можно просто:
C++
1
using namespace std;
строки входят в стандартное пространство =)
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 18:55     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #6
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int main()
{
        string s; vector <string> ss;
        int i, j, l, p = 0;
 
        getline(cin, s);
        s += ' ';
 
        l = s.length();
 
        while (p < l)
        {
                while (p < l && !isalpha(s[p])) p++;
                i = p + 1;
                while (i < l && isalpha(s[i])) i++;
                ss.push_back(s.substr(p, i - p));
                p = i;
        }
 
        for (i = 0; i < ss.size() - 1; i++)
                if (ss[i][0] == 'c') cout << ss[i] << endl;
 
        return 0;
}
Добавлено через 1 минуту

Не по теме:

Mиxaил, чорд, логично, std::string принадлежит std, но, говорю же, были случаи

Mиxaил
16.05.2011, 18:57
  #7

Не по теме:

iama, я уже увидел, что Вы написали...с сообщением меня определи просто

artscorp
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 11
16.05.2011, 19:05  [ТС]     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #8
а что это:
C++
1
2
3
4
 while (p < l && !isalpha(s[p])) p++;
                i = p + 1;
                while (i < l && isalpha(s[i])) i++;
                ss.push_back(s.substr(p, i - p));
что означает isalpha
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:08     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #9
artscorp, isalpha возвращает истину, когда аргумент (символ) является буквой (только латиница). А вообще гугл никто не отменял
asics
Freelance
Эксперт C++
2844 / 1781 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.05.2011, 19:08     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #10
А не легче...
C++
1
2
3
4
5
6
std::istringstream ist(str);
size_t cnt = 0;
while(ist >> str)
  if(*str.begin() == 'c')
    ++cnt;
std::cout << cnt;
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:11     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #11
asics, это будет корректно только при единственном разделителе - пробеле
asics
Freelance
Эксперт C++
2844 / 1781 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.05.2011, 19:22     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #12
iama, Ok.Что мешает тогда зделать так:
C++
1
std::replace_if(str.begin(), str.end(), ispunct, ' ');
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:23     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #13
asics, тогда выходит совсем не так красиво
asics
Freelance
Эксперт C++
2844 / 1781 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.05.2011, 19:25     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #14
Цитата Сообщение от iama Посмотреть сообщение
asics, тогда выходит совсем не так красиво
А мне кажиться, что в С++ использование стандартных алгоритмов это всегда/в большенстве случаев красиво.
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:28     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #15
asics, тогда вам нужно будет считать строку, заменить знаки препинания на проблелы, потом только парсить, у ForEveR красивей, а моему решению поверят, что студент сам его написал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 19:32     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++
Еще ссылки по теме:

C++ Обработка символьной информации
Обработка символьной информации C++
Задачи по теме: Обработка символьной и строковой информации C++
C++ Обработка символьной информации
Обработка символьной информации C++

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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
2844 / 1781 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
16.05.2011, 19:32     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #16
Цитата Сообщение от iama Посмотреть сообщение
у ForEveR красивей
Я этого и не отрицал, конечно же boost здесь будет рулить.
Цитата Сообщение от iama Посмотреть сообщение
тогда вам нужно будет считать строку, заменить знаки препинания на проблелы, потом только парсить
Что серйозно ?! (шутка)
Yandex
Объявления
16.05.2011, 19:32     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++
Ответ Создать тему
Опции темы

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