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

Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
08.12.2012, 16:11     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #1
Люди, подскажите, плиз, как написать програмку в с++ за условием, что дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Найти длину самого короткого и самого длинного слова, а также сами эти слова.
Помогите, чем можите, спасибо огромное.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 16:11     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова)
Посмотрите здесь:

Дана строка содержащая текст. Найти длину самого короткого и самого длинного слова. C++
Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова. C++
C++ Найти длину самого короткого слова и самого длинного слова в строке
Найти длину самого короткого и самого длинного слова. C++
C++ Найти длину самого короткого и самого длинного слова, а также сами эти слова
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
08.12.2012, 17:08     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #2
Стандартная функция strtok. Ваша задача решается небольшой модификацией примера из MSDN.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 19:28     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #3
лажу написал
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
08.12.2012, 19:33  [ТС]     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #4
Цитата Сообщение от yekka Посмотреть сообщение
yekka@ENIAC:~/tmp [0] $ g++ minmax.cxx -std=c++11 -lboost_regex -o minmax yekka@ENIAC:~/tmp [0] $ ./minmax Исходная строка: Just do it! min: do max: Just yekka@ENIAC:~/tmp [0] $ ./minmax Исходная строка: Мама мыла раму. min: Мама max: Мама yekka@ENIAC:~/tmp [0] $ ./minmax Исходная строка: Дефрагментатор ntfs под linux. min: ntfs max: Дефрагментатор yekka@ENIAC:~/tmp [0] $
Что это ??? И почему
C++
1
#include <boost/regex.hpp>
не хочет открывать???
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 19:56     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #5
поправил багу, теперь вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <iostream>
#include <boost/regex.hpp>
 
int main() {
    std::setlocale(LC_ALL, "en_US.UTF-8");
    std::wstring min, max, original;
    std::wcout << L"Исходная строка: ";
    std::getline(std::wcin, original);
 
    const wchar_t * expr = L"[a-zA-Zа-яA-Я]+";
    boost::wregex rexp(expr);
    boost::wsregex_iterator begin(original.begin(), original.end(), rexp), end;
    std::for_each(begin, end, 
            [&](const boost::match_results<std::wstring::const_iterator> & sm) {
                    if (min.length() > sm[0].length()) min = sm[0];
                    if (min.length() == 0)             min = sm[0];
                    if (max.length() < sm[0].length()) max = sm[0];
            });
    std::wcout << "min: " << min << std::endl;
    std::wcout << "max: " << max << std::endl;
}
Код
$ g++ minmax.cxx -std=c++11 -lboost_regex -o minmax

$ ./minmax
Исходная строка: Just do it!
min: do
max: Just

$ ./minmax
Исходная строка: Мама мыла раму.
min: Мама
max: Мама

$ g++ minmax.cxx -std=c++11 -lboost_regex -o minmax
Исходная строка: Дефрагментатор ntfs под linux.
min: под
max: Дефрагментатор
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
08.12.2012, 20:30     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #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
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <string>
#include <vector>
 
 
int main() {
   std::string const str = "If ranges are to be a feature of the language "
         "then they should probably be supported at language level "
         "rather than by some trick";
 
   std::istringstream iss(str);
   std::vector<std::string> words(
         (std::istream_iterator<std::string>(iss))
        , std::istream_iterator<std::string>());
   auto minmax = std::minmax_element(
          words.begin()
        , words.end()
        , [] (std::string const& lhs, std::string const& rhs) {
             return lhs.length() < rhs.length();
          });
 
   std::cout << "Word with minimum length (" << minmax.first->length()
         << "): " << *minmax.first << std::endl;
   std::cout << "Word with maximum length (" << minmax.second->length()
         << "): " << *minmax.second << std::endl;
}
http://ideone.com/a4We3n
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 20:36     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #7
gray_fox, http://ideone.com/rtCQen
неправильно определено самое короткое слово (ntfs вместо под) и неправильно самое длинное (хотя здесь, конечно, зависит от определения слова)
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
08.12.2012, 21:56     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #8
yekka, как-нибудь так тогда:
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 <algorithm>
#include <string>
#include <vector>
 
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/split.hpp>
 
 
int main() {
   std::wstring str = L"Дефрагментатор ntfs под linux,,,,,,,,,,,,,,,,,,,,,,,,,";
 
   boost::trim_if(str, boost::is_any_of(L" .,!?:;\"'()"));
   std::vector<std::wstring> words;
   boost::split(words, str, boost::is_any_of(L" .,!?:;\"'()"), boost::token_compress_on);
   auto minmax = std::minmax_element(
          words.begin()
        , words.end()
        , [] (std::wstring const& lhs, std::wstring const& rhs) {
             return lhs.length() < rhs.length();
          });
 
   std::wcout << L"Word with minimum length (" << minmax.first->length()
         << L"): " << *minmax.first << std::endl;
   std::wcout << L"Word with maximum length (" << minmax.second->length()
         << L"): " << *minmax.second << std::endl;
}
Цитата Сообщение от yekka Посмотреть сообщение
неправильно самое длинное
Ну в задании - разделено пробелами, делал попроще)
Цитата Сообщение от yekka Посмотреть сообщение
неправильно определено самое короткое слово
char и русские символы, да.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.12.2012, 22:19     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #9
yekka, а почему бы не юзать <regex>, если юзаете
Цитата Сообщение от yekka Посмотреть сообщение
-std=c++11
Добавлено через 1 минуту
Цитата Сообщение от Romantikkk Посмотреть сообщение
не хочет открывать???
а библиотека буст есть?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2012, 22:20     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
08.12.2012, 22:20     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова) #10
go, в gcc-4.7 не реализовано пока
Yandex
Объявления
08.12.2012, 22:20     Строки (Найти длину самого короткого и самого длинного слова, а также сами эти слова)
Ответ Создать тему
Опции темы

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