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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
#1

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

30.11.2012, 23:54. Просмотров 1270. Ответов 8
Метки нет (Все метки)

Текст задачи:
Найти самое длинное слово во введенной строке, вывести номер этого слова и номер его первого символа.
Пример:
Кликните здесь для просмотра всего текста
ввод : аа ааа аааааааааа аааааа
вывод: Номер слова - 3 , номер первого символа 8


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

Строковые переменные - C++
Подскажите, какой строковый тип данных поддерживает следующие действия: необходимо ввести с клавиатуры строку, содержащую слова, пробелы,...

Строковые переменные. - C++
Дано последовательность, что состоит из 1-30 слов, в каждом слове 1-5 букв, все слова разделены запятой, в конце точка. Напечатать все...

Строковые переменные - C++
Дали посмотреть код. Помогите, пожалуйста, разобраться со строковыми переменными. Тотальная путаница с LPCWSTR/const char/char. Программа...

Строковые переменные - C++
Помогите пожалуйста с лабой, буду очень благодарна за помощь. Написать программу, которая считывает текст из файла и выводит его на...

Структуры и строковые переменные - C++
Помогите, пожалуйста, найти ошибку. Четвёртый час сношаюсь с задачей, не могу найти, в чём баг. Задача простейшая с массивом из двух...

Строковые переменные (символьные массивы) - C++
Создать две строковые переменные (символьные массивы), содержащие ваше имя и фамилию. Выполнить с ними с помощью строковых функций...

8
__Александр__
7 / 10 / 0
Регистрация: 17.09.2012
Сообщений: 188
Записей в блоге: 2
01.12.2012, 00:09 #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;
}
0
a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 00:41  [ТС] #3
Цитата Сообщение от __Александр__ Посмотреть сообщение
Вот код
спасибо, но код мне немного этот сложноват. Я т сюда не могу придумать способов вылавливания нужных мне значений....

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


Цитата Сообщение от a4_necromant Посмотреть сообщение
ввод : аа ааа аааааааааа аааааа
вывод: Номер слова - 3 , номер первого символа 8
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 00:50 #4
a4_necromant, во-первых, нужна функция, которая делит строку на слова и сохраняет эти слова в какой-то массив. Это уже сделано?
0
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
01.12.2012, 01:49 #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 минуту
естественно не фильтрует символы неявляющиеся буквами
1
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,603
01.12.2012, 01:51 #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;
}
1
a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 15:29  [ТС] #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)»
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,603
01.12.2012, 16:52 #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
1
a4_necromant
1 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
01.12.2012, 20:54  [ТС] #9
MrGluck, спасибо, не заметил....
0
01.12.2012, 20:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 20:54
Привет! Вот еще темы с ответами:

Строковые переменные: Найти все слова, в которых буква ''а'' входит не менее двух раз - C++
Дан текст. Найти все слова, в которых буква ''а'' входит не менее двух раз.

Задача про комплексные числа(закрытые переменные) - C++
Нужна срочно ваша помощь, помогите не смыслящему человеку:cry:, модифицировать программу таким образом, чтобы класс содержал закрытые...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

Переменные,значение функции,вспомогательные переменные. - C++
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и вывести новые значения переменных A,B,C. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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