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

Массив слов - C++

Восстановить пароль Регистрация
 
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
11.12.2011, 17:32     Массив слов #1
Доброго времени суток, уважаемые форумчане. Будьте любезны, подскажите как решить задачку.


Задача. Для каждого слова заданного предложения указать, сколько раз оно встречается в предложении.
Нужно выполнить через string.

моя исходная строка "hello i world i am imba prog hello world world am am am."

У меня не получается правильно заполнить нужными словами массив строк стринг. Пробовал много раз, ничего не выходит .

Еще хотел бы спросить, как под дебагом в visual studio 2010 посмотреть значения строк массива string. т.е. как сделать, чтобы показывало значение каждой строчки из массива(так как показывает значение каждой переменной типа int в массиве int под дебагом).

вот мой недописанный неправильный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
{   
    string s1="hello i world i am imba prog hello world world am am am.";
    string s2[15];
    int a[15],f,b,c=0,d=0,e=0;
    
    for(b=0;b<s1.length();b++)
        if (s1.at(b)==' ')
        {   if (c>0) c=e;
            
            for(;c<b;c++) s2[d].at(c)=s1.at(c); // комиплятор ругается на эту строчку
            d++;
            e=b;//номер предыдущего сивола пробела
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 17:32     Массив слов
Посмотрите здесь:

ввод слов в массив и подсчёт введённых слов C++
Массив слов C++
C++ Дан массив слов. Определить количество слов массива, которые не являются «перевертышем».
C++ Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов
C++ Массив символов (Подсчитать количество слов в строке, при условии, что в качестве разделителя слов используется один или несколько пробелов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tay69
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 8
11.12.2011, 17:55     Массив слов #2
Цитата Сообщение от rmb Посмотреть сообщение
for(;c<b;c++) s2[d].at(c)=s1.at(c); // комиплятор ругается на эту строчку
ну дык же начального значения нет
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
12.12.2011, 22:37  [ТС]     Массив слов #3
поменял на string s2={" "}; не помогло
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
13.12.2011, 00:41     Массив слов #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <string>
 
int main()
{
    std::string source( "qwe tr qrd asd tr" );
    std::vector < std::string > vec;
 
    std::istringstream ist( source );
    
    std::copy ( std::istream_iterator < std::string >( ist ),
                std::istream_iterator < std::string >(),
                std::inserter( vec, std::begin( vec ) ) );
 
    for ( auto it = std::begin( vec ); it != std::end( vec ); ++it )
        std::cout << *it << " - " << std::count( std::begin( vec ), std::end( vec ), *it ) << std::endl;
 
    return 0;
}
Добавлено через 2 минуты
Или так еще можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <sstream>
#include <string>
 
int main()
{
    std::string source( "qwe tr qrd asd tr" ), temp;
    std::map < std::string, unsigned int > m;
 
    std::istringstream ist( source );
    while ( ist >> temp ) 
        m[ temp ]++;
 
    for ( std::map< std::string, unsigned int >::iterator it = m.begin(); it != m.end(); ++it )
        std::cout << it -> first << " - " << it -> second << std::endl;
 
    return 0;
}
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
14.12.2011, 20:56  [ТС]     Массив слов #5
Цитата Сообщение от Mиxaил Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <string>
 
int main()
{
    std::string source( "qwe tr qrd asd tr" );
    std::vector < std::string > vec;
 
    std::istringstream ist( source );
    
    std::copy ( std::istream_iterator < std::string >( ist ),
                std::istream_iterator < std::string >(),
                std::inserter( vec, std::begin( vec ) ) );
 
    for ( auto it = std::begin( vec ); it != std::end( vec ); ++it )
        std::cout << *it << " - " << std::count( std::begin( vec ), std::end( vec ), *it ) << std::endl;
 
    return 0;
}
Добавлено через 2 минуты
Или так еще можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <sstream>
#include <string>
 
int main()
{
    std::string source( "qwe tr qrd asd tr" ), temp;
    std::map < std::string, unsigned int > m;
 
    std::istringstream ist( source );
    while ( ist >> temp ) 
        m[ temp ]++;
 
    for ( std::map< std::string, unsigned int >::iterator it = m.begin(); it != m.end(); ++it )
        std::cout << it -> first << " - " << it -> second << std::endl;
 
    return 0;
}
Михаил, не могли бы вы подробно описать что и как тут работает? я совсем не понимаю ничего
Yandex
Объявления
14.12.2011, 20:56     Массив слов
Ответ Создать тему
Опции темы

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