0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 10
1

Выбрать из данной строки все слова, длина которых равна длине первого слова

19.04.2018, 16:14. Показов 1882. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу, выбирающую из данной строки все слова, длина которых равна длине первого слова.С++
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2018, 16:14
Ответы с готовыми решениями:

Написать программу, выбирающую из данной строки все слова, длина которых равна длине первого слова.
Добрый вечер всем, помогите пожалуйста с задачей. Написать программу, выбирающую из данной строки...

Выбрать из заданной строки все слова, длина которых равна длине первого слова
Напишите программу, выбирающую из заданной строки все слова, длина которых равна длине первого...

Создать новый текст, который содержит все слова исходного текста, длина которых равна длине минимального слова
Написать программу на языке Pascal для обработки строк. Строка должна вводиться с клавиатуры....

В функции вывести на экран все слова строки длина которых больше длины первого слова
Вывести символьную строку. В функции вывести на экран все слова строки длина которых больше длины...

9
391 / 261 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
21.04.2018, 06:35 2
Лучший ответ Сообщение было отмечено MiRaDey как решение

Решение

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
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <vector>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    string main_s;
    int pos(0);
    cout << "Enter ur string : ";
    getline(cin,main_s);
 
    int counter(1),current(1);
    while(main_s.find(' ',pos+1) != main_s.npos){
        ++counter;
        pos = main_s.find(' ',pos+1);
    }
    pos = 0;
 
    string v[counter];
 
    string temp(main_s);
    pos = temp.find(' ');
    temp.erase(temp.begin()+temp.find(' '),temp.end());
    v[0] = temp;
 
    while(main_s.find(' ') != main_s.npos){
        temp = main_s;
        main_s.erase(main_s.begin()+main_s.find(' '),main_s.begin()+main_s.find(' ')+1);
        pos = temp.find(' ') + 1;
        temp.erase(temp.begin(),temp.begin()+pos);
        if(temp.find(' ') == temp.npos){
            v[current++] = temp;
            break;
        }
        temp.erase(temp.begin()+temp.find(' ') + 1,temp.end());
        v[current++] = temp;
    }
    cout << "\n";
    for(int i = 0;i<current;++i){
        cout << v[i] << "\n";
    }
    cout << "\n";
 
    int size(v[0].length());
    for(int i = 1;i<current;++i){
        if(v[i].length() == size)cout << "at " << i+1 << "; word is : " << v[i] << "\n";
    }
 
    cout << endl;
    return 0;
}
Слова пробелом разделять, ибо для знаков препинания много выйдет. Может завтра утром доделаю, чтобы с ними было

Добавлено через 11 часов 56 минут
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    string main_s,rule(".,?!-;:");
    int current(0);
    cout << "Enter ur string : ";
    getline(cin,main_s);
 
    if(main_s.at(main_s.length()-1) == '.' || main_s.at(main_s.length()-1) == ' '
            || main_s.at(main_s.length()-1) == '!' || main_s.at(main_s.length()-1) == ',' || main_s.at(main_s.length()-1) == '!'){
        main_s.erase(main_s.length()-1);
    }
 
    int counter(1);
    for(int i = 0;i<main_s.length();++i){
        if(main_s.at(i) == ' ')++counter;
        if(rule.find(main_s.at(i)) != rule.npos)++counter;
    }
 
    string v[counter];
    bool contains(0),first(1);
 
    for(int i = 0;i<main_s.length();++i){
        contains = 0;
        if(rule.find(main_s.at(i)) != main_s.npos)contains = 1;
        if(main_s.at(i) == ' ')contains = 1;
 
        if(contains){
            if(first){
                string temp(main_s);
                temp.erase(i,temp.length());
                v[current++] = temp;
                first = 0;
            }
            string temp(main_s);
            temp.erase(0,i+1);
            bool simple(0);
            for(int j = 0;j<rule.length();++j){
                if(temp.find(rule.at(j)) != temp.npos || temp.find(' ') != temp.npos){
                    simple = 1;
                    break;
                }
            }
            if(!simple){
                v[current++] = temp;
                break;
            }
            int position(0);
            for(int a = 0;a<temp.length();++a){
                if(temp.at(a) == ' '){
                    position = a;
                }
                if(position)break;
 
                if(rule.find(temp.at(a)) != rule.npos)position = a;
                if(position)break;
 
            }
            temp.erase(position,temp.length());
            v[current++] = temp;
        }
    }
    for(int i = 0;i<current;++i)cout << v[i] << "\n";
    cout << "\n";
 
    int size = v[0].length();
    for(int i = 1;i<current;++i){
        if(v[i].length() == size)cout << "the word is : " << v[i] << "; at :" << i+1 << "\n";
    }
 
    cout << endl;
    return 0;
}
Слова разделять одним пробелом или одним знаком препинания, в конце можешь точку ставить, можешь не ставить. Если надо дополнить знаки препинания - в 7 строке к нынешним припиши, так же - без пробела, слитно
0
2703 / 1955 / 975
Регистрация: 21.12.2010
Сообщений: 3,645
Записей в блоге: 10
21.04.2018, 09:02 3
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 <string>
#include <algorithm>
#include <iterator>
#include <regex>
#include <cstdlib>
 
 
int main()
{
    system("chcp 1251");
    std::string str("Выбрать из данной строки все слова, длина которых равна длине первого слова.");
    std::regex reg("[а-яА-ЯёЁ\\w]+");
    std::sregex_token_iterator ib{ str.begin(), str.end(), reg }, ie;
    if (ib != ie)
    {
        std::ssub_match const fsm{ *ib };
        std::copy_if(++ib, ie, std::ostream_iterator<std::ssub_match>{std::cout, "\n"}, [&fsm](auto const& sm) 
        {
            return sm.length() == fsm.length(); 
        });
    }
}
0
0 / 0 / 0
Регистрация: 19.04.2018
Сообщений: 10
24.04.2018, 12:21  [ТС] 4
нужно написать программу,при выводе которой программа определяет какие слова равны первому слову и выводила их на экран. Написать программу нужно при помощи Char. Заранее спасибо.
0
792 / 598 / 318
Регистрация: 24.02.2017
Сообщений: 2,128
24.04.2018, 13:19 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
 
int main()
 {
  char s[]="asd hjgf fgh df dsa ljkk asd",*p;
  int i;
 
   i=strlen(strtok(s," "));
   do {
    p = strtok('\0', " ");
    if(p)
       if(i==strlen(p))
         cout<<p<<"\n";
  } while(p);
 
   system("PAUSE");
   return
0
239 / 265 / 218
Регистрация: 14.11.2016
Сообщений: 1,035
24.04.2018, 14:41 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream> // cout endl
#include <string> // string getline
#include <list> // list
#include <utility> // pair
#include <algorithm> // find_if distance
#include <iterator> // reverse_iterator
#include <cctype> // isalpha isdigit isspace ispunct
 
template<typename _Ty>
using Word = std::pair<_Ty, _Ty>;
 
// Является ли символ символом слова
inline bool IsSymbolWord(const char&);
// Является ли символ разделителем
inline bool IsDelim(const char&);
/*
    Ищет слово в нужном диапазоне
    1-2) Диапазон в котором искать слово
*/
template<typename _Iter> inline
Word<_Iter> FindWord(_Iter, _Iter);
/*
    Поиск слов эквивалентных по длине нужному значению
     1) Итератор для вставки результата
     2) Длина слова которое нужно найти
     3-4) Диапазон в котором искать слово
*/
template<typename _OutputIt, typename _InputIt> inline
_OutputIt FindWordEqualLength(_OutputIt, const unsigned&, _InputIt, _InputIt);
 
int main()
{
    std::cout << "Enter the Text: ";
    std::string str{};
    std::getline(std::cin, str);
    
    auto firstWord = FindWord(str.cbegin(), str.cend()); // Ищем первое слово
    std::cout << std::endl << "First Word: ";
    std::copy(firstWord.first, firstWord.second, std::ostream_iterator<char>(std::cout, "")); // Выводим первое слово по символам
    std::cout << std::endl << std::endl;
    std::string::difference_type Length = std::distance(firstWord.first, firstWord.second); // Длина первого слова
    
    std::list<Word<std::string::const_iterator>> data{};
    FindWordEqualLength(std::back_inserter(data), Length, firstWord.second, str.cend());
 
    std::cout << "Result:" << std::endl;
    if (data.empty()) // Если контейнер пуст...
    {
        std::cout << "< empty >" << std::endl;
    }
    else // Иначе...
    {
        for (const auto &it : data) // Выводим каждое слово в новой строке по символам...
        {
            std::copy(it.first, it.second, std::ostream_iterator<char>(std::cout, ""));
            std::cout << std::endl;
        }
    }
    std::cout << std::endl;
}
 
template<typename _OutputIt, typename _InputIt>
_OutputIt FindWordEqualLength(_OutputIt d_First, const unsigned &Length, _InputIt First, _InputIt Last)
{
    /// Поиск слов с похожей длинной
    _InputIt beg{ First };
    while (beg != Last) // Пока не конец строки...
    {
        Word<_InputIt> word = FindWord(beg, Last); // Ищем слово
        if (Length == std::distance(word.first, word.second)) // Если длины слов совпали...
        { // ..вставляем в контейнер
            *d_First++ = { word.first, word.second };
        }
        beg = word.second;
    }
    return d_First;
}
 
template<typename _Iter>
Word<_Iter> FindWord(_Iter First, _Iter Last)
{
    std::pair<_Iter, _Iter> res{};
    res.first = std::find_if(First, Last, IsSymbolWord);
    res.second = std::find_if(res.first, Last, IsDelim);
    return res;
}
 
bool IsSymbolWord(const char &Ch)
{
    return std::isalnum(Ch);
}
 
bool IsDelim(const char &Ch)
{
    return (std::isspace(Ch) || std::ispunct(Ch));
}
0
792 / 598 / 318
Регистрация: 24.02.2017
Сообщений: 2,128
24.04.2018, 14:48 7
anapshy,
Цитата Сообщение от MiRaDey Посмотреть сообщение
Написать программу нужно при помощи Char
0
239 / 265 / 218
Регистрация: 14.11.2016
Сообщений: 1,035
24.04.2018, 15:00 8
с "чарами"
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream> // cout endl
#include <string> // string getline
#include <list> // list
#include <utility> // pair
#include <algorithm> // find_if distance
#include <iterator> // reverse_iterator
#include <cctype> // isalnum isspace ispunct
#include <cstring> // strlen
 
template<typename _Ty>
using Word = std::pair<_Ty, _Ty>;
 
// Является ли символ символом слова
inline bool IsSymbolWord(const char&);
// Является ли символ разделителем
inline bool IsDelim(const char&);
/* Ищет слово в нужном диапазоне
1-2) Диапазон в котором искать слово */
template<typename _Iter> inline
Word<_Iter> FindWord(_Iter, _Iter);
/* Поиск слов эквивалентных по длине нужному значению
1) Итератор для вставки результата
2) Длина слова которое нужно найти
3-4) Диапазон в котором искать слово */
template<typename _OutputIt, typename _InputIt> inline
_OutputIt FindWordEqualLength(_OutputIt, const unsigned&, _InputIt, _InputIt);
 
int main()
{
    std::cout << "Enter the Text: ";
    char * const str = new char[512]{}; /* с "ЧАРАМИ" */
    std::cin.getline(str, 512);
    char *strEnd{ str + std::strlen(str) };
 
    auto firstWord = FindWord(str, strEnd); // Ищем первое слово
    std::cout << std::endl << "First Word: ";
    std::copy(firstWord.first, firstWord.second, std::ostream_iterator<char>(std::cout, "")); // Выводим первое слово по символам
    std::cout << std::endl << std::endl;
    std::string::difference_type Length = std::distance(firstWord.first, firstWord.second); // Длина первого слова
 
    std::list<Word<char*>> data{};
    FindWordEqualLength(std::back_inserter(data), Length, firstWord.second, strEnd);
 
    std::cout << "Result:" << std::endl;
    if (data.empty()) // Если контейнер пуст...
    {
        std::cout << "< empty >" << std::endl;
    }
    else // Иначе...
    {
        for (const auto &it : data) // Выводим каждое слово в новой строке по символам...
        {
            std::copy(it.first, it.second, std::ostream_iterator<char>(std::cout, ""));
            std::cout << std::endl;
        }
    }
    std::cout << std::endl;
    delete[] str;
}
 
template<typename _OutputIt, typename _InputIt>
_OutputIt FindWordEqualLength(_OutputIt d_First, const unsigned &Length, _InputIt First, _InputIt Last)
{
    /// Поиск слов с похожей длинной
    _InputIt beg{ First };
    while (beg != Last) // Пока не конец строки...
    {
        Word<_InputIt> word = FindWord(beg, Last); // Ищем слово
        if (Length == std::distance(word.first, word.second)) // Если длины слов совпали...
        { // ..вставляем в контейнер
            *d_First++ = { word.first, word.second };
        }
        beg = word.second;
    }
    return d_First;
}
 
template<typename _Iter>
Word<_Iter> FindWord(_Iter First, _Iter Last)
{
    std::pair<_Iter, _Iter> res{};
    res.first = std::find_if(First, Last, IsSymbolWord);
    res.second = std::find_if(res.first, Last, IsDelim);
    return res;
}
 
bool IsSymbolWord(const char &Ch)
{
    return std::isalnum(Ch);
}
 
bool IsDelim(const char &Ch)
{
    return (std::isspace(Ch) || std::ispunct(Ch));
}
0
2703 / 1955 / 975
Регистрация: 21.12.2010
Сообщений: 3,645
Записей в блоге: 10
25.04.2018, 09:27 9
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 <regex>
#include <algorithm>
#include <cstring>
#include <iterator>
 
 
int main() 
{
    char* str = "Asd, hjgf, fgh, df, dsa ljkk asd.";
    std::regex reg{"\\w+"};
    int i{ 0 }, fsiz{ 0 };
    std::copy_if(std::cregex_token_iterator{ str, str + strlen(str), reg }, {}, std::ostream_iterator<std::csub_match>{std::cout, "\n"}, [&](auto const& sm)
    {
        bool ret = false;
        if (0 == i)
        {
            fsiz = sm.length();
        }
        else if(sm.length() == fsiz)
        {
            ret = true;
        }
        ++i;
        return ret;
    });
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.04.2018, 14:09 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
 
int main()
{
    std::string str = "Eniki beniki eli lemon vareniki apple orange", first;
    std::istringstream ist(str);
    ist >> first;
    std::cout << first << " ";
    using input_it = std::istream_iterator<std::string>;
    std::copy_if(input_it(ist), input_it(), std::ostream_iterator<std::string>(std::cout, " "),
        [&first](const auto &s) { return s.length() == first.length(); });
}
0
25.04.2018, 14:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2018, 14:09
Помогаю со студенческими работами здесь

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

Дополнить слова пробелами, чтобы длина была равна длине самого длинного слова
Дополнить каждое слово предложения пробелами так , что бы длина была равна длине самого длинного...

Выбрать те слова, длина которых равна заданному числу
Выбрать те слова, длина которых равна заданному числу.

задан текст. удалить из нее все слова, длина которых четная (создать новый массив, оставив все слова, длина которых нечетная)
задан текст. удалить из нее все слова, длина которых четная (создать новый массив, оставив все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru