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

Задача на строковые переменные в c++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
a4_necromant
 Аватар для a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
30.11.2012, 23:54     Задача на строковые переменные в c++ #1
Текст задачи:
Найти самое длинное слово во введенной строке, вывести номер этого слова и номер его первого символа.
Пример:
Кликните здесь для просмотра всего текста
ввод : аа ааа аааааааааа аааааа
вывод: Номер слова - 3 , номер первого символа 8


Кликните здесь для просмотра всего текста
Прошу помощи, совсем запутался, недавно только начал изучать c++. Задача не горит, но к понедельнику-вторнику хотелось бы разобраться с этой темой
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 23:54     Задача на строковые переменные в c++
Посмотрите здесь:

Строковые переменные C++
C++ Строковые переменные
Строковые переменные. C++
Структуры и строковые переменные C++
Строковые переменные (символьные массивы) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
__Александр__
7 / 10 / 0
Регистрация: 17.09.2012
Сообщений: 191
Записей в блоге: 2
01.12.2012, 00:09     Задача на строковые переменные в c++ #2
Вот код
он реализует:
1) нахождение самого длинного слова в строке
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
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <set>
#include <map>
#include <cstdlib>
 
struct LenCmp {
    bool operator () (const std::string & a, const std::string & b){
        return a.size() > b.size();
    }
};
 
int main(){
    std::string buf;
    std::cout << "String: ";
    std::getline(std::cin, buf);
    if ( buf.empty() )
        return 1;
 
    std::istringstream ist(buf);
    std::multiset<std::string, LenCmp> ms;
    while ( ist >> buf )
        ms.insert(buf);
    
    int maxLen = ms.begin()->size(); 
 
    std::map<std::string, int> map;
    for ( std::multiset<std::string, LenCmp>::const_iterator i = ms.begin(); i != ms.end() && i->size() == maxLen; ++i )
        map[*i]++;
 
    std::cout << "The maximum length is " << maxLen << " characters." << std::endl;
    std::cout << "Word(s) of this length:" << std::endl;
    std::cout << "Word                          Count\n--------------------------------------------------" <<std::endl;
    for ( std::map<std::string, int>::const_iterator i = map.begin(); i != map.end(); ++i )
        std::cout << std::left << std::setw(30) << i->first << i->second << std::endl;
 
    system("pause");
    return 0;
}
a4_necromant
 Аватар для a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 00:41  [ТС]     Задача на строковые переменные в c++ #3
Цитата Сообщение от __Александр__ Посмотреть сообщение
Вот код
спасибо, но код мне немного этот сложноват. Я т сюда не могу придумать способов вылавливания нужных мне значений....

Цитата Сообщение от __Александр__ Посмотреть сообщение
1) нахождение самого длинного слова в строке
2) колличество раз, где оно встретилось в тексте
немного не то что мне нужно, я хотел:
Цитата Сообщение от a4_necromant Посмотреть сообщение
вывести номер этого слова и номер его первого символа.
и пример ввода/вывода дал:


Цитата Сообщение от a4_necromant Посмотреть сообщение
ввод : аа ааа аааааааааа аааааа
вывод: Номер слова - 3 , номер первого символа 8
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 00:50     Задача на строковые переменные в c++ #4
a4_necromant, во-первых, нужна функция, которая делит строку на слова и сохраняет эти слова в какой-то массив. Это уже сделано?
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
01.12.2012, 01:49     Задача на строковые переменные в c++ #5
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
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char word []="aaa aaaaaa aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaa aaaaaaaaaaaaaa";
int count=0;
int number=0;
int temp=0;
int q=0;
int len=strlen(word);
for(int n=0;n<=len;n++)
{
if(isalpha(word[n])) q++;
else if(isspace(word[n])||n==len)
{{if(q>temp)
{temp=q;number=n-q+1;}
q=0;}
}
}
cout<<number<<endl;
system("pause");
return 0;
}
Добавлено через 5 минут
исправил

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
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char word []="aaa aaaaaa aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaa aaaaaaaaaaaaaa";
int count=0;
int number=0;
int temp=0;
int q=0;
int wordcount=0;
int wordnumb=0;
int len=strlen(word);
for(int n=0;n<=len;n++)
{
if(isalpha(word[n])) q++;
else if(isspace(word[n])||n==len)
{wordcount++;
    {if(q>temp)
{temp=q;number=n-q+1;wordnumb=wordcount;}
q=0;}
}
}
cout<<number<<" "<<wordnumb<<endl;
system("pause");
return 0;
}
Добавлено через 1 минуту
естественно не фильтрует символы неявляющиеся буквами
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
01.12.2012, 01:51     Задача на строковые переменные в c++ #6
Вот попроще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::string max = *std::max_element(std::istream_iterator<std::string>(ist),
        std::istream_iterator<std::string>(),
        [](const std::string &s1, const std::string &s2)
        { return s1.size() == s2.size() ? s1 < s2 : s1.size() < s2.size(); } );
    const std::size_t pos = str.find(max);
    std::cout<< "Number of word: "
             << std::count(str.begin(), str.begin() + pos, ' ') + 1<< std::endl
             << "Number of first char: "<< pos + 1<< std::endl;
    return 0;
}
a4_necromant
 Аватар для a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 15:29  [ТС]     Задача на строковые переменные в c++ #7
Проблема решена. Спасибо booker.

MrGluck, ваш вариант выдает много ошибок:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ g++ lab7_2.cpp
lab7_2.cpp: В функции «int main()»:
lab7_2.cpp:14:76: предупреждение: lambda expressions only available with -std=c++11 or -std=gnu++11 [по умолчанию включена]
lab7_2.cpp:14:78: ошибка: нет соответствующей функции для вызова «max_element(std::istream_iterator<std::basic_string<char> >, std::istream_iterator<std::basic_string<char> >, main()::<lambda(const string&, const string&)>)»
lab7_2.cpp:14:78: замечание: candidates are:
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from lab7_2.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h:6300:5: замечание: template<class _FIter> _FIter std::max_element(_FIter, _FIter)
/usr/include/c++/4.7/bits/stl_algo.h:6300:5: замечание:   template argument deduction/substitution failed:
lab7_2.cpp:14:78: замечание:   candidate expects 2 arguments, 3 provided
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from lab7_2.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h:6328:5: замечание: template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)
lab7_2.cpp:14:78: ошибка: template argument for «template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)» uses local type «main()::<lambda(const string&, const string&)>»
lab7_2.cpp:14:78: ошибка:   при конкретизации «template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)»
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
01.12.2012, 16:52     Задача на строковые переменные в c++ #8
Цитата Сообщение от a4_necromant Посмотреть сообщение
Проблема решена. Спасибо booker.

MrGluck, ваш вариант выдает много ошибок:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ g++ lab7_2.cpp
lab7_2.cpp: В функции «int main()»:
lab7_2.cpp:14:76: предупреждение: lambda expressions only available with -std=c++11 or -std=gnu++11 [по умолчанию включена]
lab7_2.cpp:14:78: ошибка: нет соответствующей функции для вызова «max_element(std::istream_iterator<std::basic_string<char> >, std::istream_iterator<std::basic_string<char> >, main()::<lambda(const string&, const string&)>)»
lab7_2.cpp:14:78: замечание: candidates are:
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from lab7_2.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h:6300:5: замечание: template<class _FIter> _FIter std::max_element(_FIter, _FIter)
/usr/include/c++/4.7/bits/stl_algo.h:6300:5: замечание:   template argument deduction/substitution failed:
lab7_2.cpp:14:78: замечание:   candidate expects 2 arguments, 3 provided
In file included from /usr/include/c++/4.7/algorithm:63:0,
                 from lab7_2.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h:6328:5: замечание: template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)
lab7_2.cpp:14:78: ошибка: template argument for «template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)» uses local type «main()::<lambda(const string&, const string&)>»
lab7_2.cpp:14:78: ошибка:   при конкретизации «template<class _FIter, class _Compare> _FIter std::max_element(_FIter, _FIter, _Compare)»
там же написано, используйте 11 стандарт
Код
$ g++ lab7_2.cpp -std=c++11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 20:54     Задача на строковые переменные в c++
Еще ссылки по теме:

C++ Строковые переменные
C++ Строковые переменные: Найти все слова, в которых буква ''а'' входит не менее двух раз
Задача про комплексные числа(закрытые переменные) C++

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

Или воспользуйтесь поиском по форуму:
a4_necromant
 Аватар для a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 20:54  [ТС]     Задача на строковые переменные в c++ #9
MrGluck, спасибо, не заметил....
Yandex
Объявления
01.12.2012, 20:54     Задача на строковые переменные в c++
Ответ Создать тему
Опции темы

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