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

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

Войти
Регистрация
Восстановить пароль
 
FMihail
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 33
#1

Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово - C++

02.05.2013, 12:46. Просмотров 839. Ответов 3
Метки нет (Все метки)

Дано предложение, слова в нем разделены пробелами. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово. Если таких слов больше половины, то их необходимо перенести в конец предложения. Если я ввожу строку : okno opera stryna argentina akter программа выводит: okno stryna opera argentina akter. Но если пробую: okno teatr rabota africa akter то программа выводит исходную строку не изменяя ее. В чем проблема?
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
// Schitaet chislo slov v stroke i skladivaet slova v massiv
size_t WordsNumber(char* const pstring, char const** const parrayp)
{
    char const* pdelimeters = " ";
    size_t wn = 0;
    for(char* p = strtok(pstring, pdelimeters); p; p = strtok(0, pdelimeters))
    {
        parrayp[wn] = p;
        ++wn;
    }
    return wn;
}
 
// Schitaet chislo slov nachinaushihsya s poslednei bukvi predidushego slova
size_t SpecWordsNumber(char const* const* parrayp)
{
    size_t swn = 0;
    while(*++parrayp)
        if(isalpha(**parrayp) && (**parrayp == *(parrayp[-1] + strlen(parrayp[-1]) - 1)))
            ++swn;
    return swn;
}
 
int main()
{
    char str[300], strresult[sizeof(str)] = {0}, strtemp[sizeof(str)] = {0};
    char const* arrayp[100] = {0};
    puts("Vvedite stroku:");
    gets(str);
    strcpy(strresult, str);
    size_t wn = WordsNumber(str, arrayp);
    printf("\nChislo slov v stroke: %u\n", wn);
    size_t swn = SpecWordsNumber(arrayp);
    printf("\nChislo slov nachinaushihsya s poslednei bukvi predidushego slova: %u\n", swn);
 
    // Esli takih slov bol'she polovini, to perenosim ih v konec stroki
    if(double(swn) > double(wn) / 2)
    {
        char const* const* parrayp = arrayp;
        char const* const delimeter = " ";
        strcat(strcpy(strresult, *parrayp), delimeter);
        while(*++parrayp)
        {
            if(!(isalpha(**parrayp) && (**parrayp == *(parrayp[-1] + strlen(parrayp[-1]) - 1))))
                strcat(strcpy(strresult + strlen(strresult), *parrayp), delimeter);
            else
                strcat(strcpy(strtemp + strlen(strtemp), *parrayp), delimeter);
        }
        strcat(strresult, strtemp);
    }
    printf("\nRezul'tat:\n%s\n\n", strresult);
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 12:46     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово
Посмотрите здесь:

Подсчитать колличество слов очереди, которое начинается и заканчивается одной и той же литерой. - C++
Прошу помочь в решении задания:Информационное поле элемента очереди-строка. Подсчитать колличество слов очереди, которое начинается и...

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

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

Слово которое начинается и заканчивается на одну и ту же букву - C++
Вводится буква, вводится слово и если в этом слове первая и последняя буква соответствует заданной - True иначе false

Выделить из строки слово, которое начинается с гласной, и заканчивается на согласную букву - C++
как сравнить буквы в строке?Например,мне нужно выделить слово .котрое начинается с гласной, и заканчивается на н гласную.Тобиш,на любуую...

Найти в строке любое слово, которое начинается на букву а и заканчивается на букву а - C++
Помогите: Дано рядок S. Найти любое слово которое начинаться на букву а и заканчивается на букву а. Если таких слов нет, то...

Верно ли, что заданное число начинается и заканчивается одной и той же цифрой? - C++
Есть условия: 1.Дано натуральное число: найти сумму цифр этого числа; верно ли, что число начинается и заканчивается одной и...

Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово? - C++
Даны два слова. Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово?

Поиск слова которое начинается и заканчивается на одну букву - C++
Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой. Язык С++

Вывести слова, которые начинаются на ту же букву, на которую заканчивается предыдущее слово - C++
Пожалуйста помогите сделать эти задания!буду очень благодарен!!!!!!Заранее огромное спасибо! Задание1: Дана матрица F(6,5)....

Даны два слова.Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово - C++
Даны два слова.Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово.

Вывод слова из строки, которое начинается и заканчивается на одну и ту же букву - C++
для заданной строки вывести на экран слова, которые начинаются и заканчиваются на одну и ту же букву сделайте без printf, а с cout и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cyberbrain1000
23 / 23 / 3
Регистрация: 15.04.2013
Сообщений: 62
02.05.2013, 13:19     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово #2
а что должна вывести во втором случае? Ведь слова rabota africa akter и так стоят в конце
FMihail
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 33
02.05.2013, 13:45  [ТС]     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово #3
все понял,просто задание немного не так понял
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.05.2013, 15:10     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово #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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <boost/algorithm/string.hpp>
 
int main()
{
    std::string s = "world okno opera adc conan stryna argentina akter";
    //std::getline(std::cin, s); //или ручной ввод
    
    std::vector<std::string> words;
    boost::split(words, s, boost::is_any_of(" ,:;!?"), boost::token_compress_on);
    
    std::cout<<"All words:\n";
    for (const auto& i : words) std::cout<<i<<" ";
    
    char letter = words[0].back();      //последняя буква первого слова
    std::vector<std::string> matches;   //совпавшие слова
    
    std::for_each(words.begin()+1, words.end(), [&letter, &matches](const std::string& s)
    {
        if (letter == s.front()) matches.push_back(s);  //ищем совпадения
        letter = s.back();
    });
    std::cout<<"\n\nMatches = "<<matches.size()<<" times\n";
    std::cout<<"\nMatches words:\n";
    for (const auto& i : matches) std::cout<<i<<" ";
    
    if (matches.size() > words.size()/2)
    {
        words.erase(std::remove_if(words.begin(), words.end(), [&matches](const std::string& s)
        {
            return std::any_of(matches.begin(), matches.end(), [&s](const std::string& str){return str == s;});
        }), words.end());
        matches.insert(matches.begin(), words.begin(), words.end());
        
        std::cout<<"\n\nResult:\n";
        for (const auto& i : matches) std::cout<<i<<" ";
    }
    
    std::cout<<"\n\n\n";
    return 0;
}
Yandex
Объявления
02.05.2013, 15:10     Операции над строкой. Подсчитать количество слов, которое начинается с той буквы, которой заканчивается предыдущее слово
Ответ Создать тему
Опции темы

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