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

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

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

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

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

помогите, написать код программы, экзамен скоро, очень надо.
Нужно определить количество слов, начинающихся с буквы "c"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
1250 / 975 / 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 18:51     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #4
ForEveR, а чо, у меня какой-то компилятор (сейчас не могу вспомнить какой), без этого строки кушать отказывался
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
16.05.2011, 18:52     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #5

Не по теме:

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



iama, можно просто:
C++
1
using namespace std;
строки входят в стандартное пространство =)
iama
1250 / 975 / 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
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:08     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #9
artscorp, isalpha возвращает истину, когда аргумент (символ) является буквой (только латиница). А вообще гугл никто не отменял
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:11     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #11
asics, это будет корректно только при единственном разделителе - пробеле
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
16.05.2011, 19:22     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #12
iama, Ok.Что мешает тогда зделать так:
C++
1
std::replace_if(str.begin(), str.end(), ispunct, ' ');
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:23     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #13
asics, тогда выходит совсем не так красиво
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
16.05.2011, 19:25     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #14
Цитата Сообщение от iama Посмотреть сообщение
asics, тогда выходит совсем не так красиво
А мне кажиться, что в С++ использование стандартных алгоритмов это всегда/в большенстве случаев красиво.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 19:28     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++
Еще ссылки по теме:
C++ Обработка символьной информации
обработка символьной информации C++
Обработка символьной информации.Гороскоп C++
обработка символьной и строковой информации C++
C++ Обработка символьной информации и объктно-ориентированное программирования

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

Или воспользуйтесь поиском по форуму:
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
16.05.2011, 19:28     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++ #15
asics, тогда вам нужно будет считать строку, заменить знаки препинания на проблелы, потом только парсить, у ForEveR красивей, а моему решению поверят, что студент сам его написал
Yandex
Объявления
16.05.2011, 19:28     ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ В С++
Ответ Создать тему
Опции темы

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