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

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

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

Определить первое слово с указанной буквой - C++

03.08.2013, 17:38. Просмотров 668. Ответов 12
Метки нет (Все метки)

Помогите написать функцию, пожалуйста!

Условие: допускается использование любых видов функций.

Разработать функцию, которая определяет в заданной символьной строке первое слово, содержащее указанную букву и возвращает указатель на конец этого слова. Используя разработанную функцию, выделить и напечатать все слова из введенного предложения, в которых встречается заданная буква, или вывести сообщение об отсутствии таких слов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2013, 17:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить первое слово с указанной буквой (C++):

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

Определить, сколько раз в тексте повторяется первое слово - C++
В общем задание таково: есть файл text.txt ( с текстом ) программа должна прочитать его и сказать сколько раз в тексте повторяется первое...

Определить сколько раз встречается в тексте первое его слово - C++
Определить сколько раз встречается первое слово текста в тексте Вот код: #include "stdafx.h" #include <iostream> #include...

Определить самое короткое слово предложения, первое, если таких несколько. - C++
Всем доброго времени суток! Пару дней назад начал изучение Си. Задали д/з...Вот собственно условие: В тексте, записанном в строке S,...

Определить, какое слово чаще встречается в строке - первое или последнее (перевести с паскаля на си) - C++
определить, каких слов больше в строке первого или последнего. вывести первое и последнее слова на экран. var ...

Определить объединение из двух полей. Первое поле – массив из четырех байт, второе – двойное слово - C++
Добрый вечер, есть задача с которой ну никак не удается справиться: Определить объединение из двух полей. Первое поле – массив из...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Catstail
Модератор
22537 / 10942 / 1774
Регистрация: 12.02.2012
Сообщений: 18,078
03.08.2013, 20:48 #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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "string.h"
#include "iostream.h"
 
// конец первого слова, содержащего заданную
// букву (или NULL, если буквы нет)
 
char * first (char* sent, char lett)
{
   int i,j=-1;
   for (i=0; i<strlen(sent); i++)
       if (*(sent+i) == lett)
       {
           j=i;
           break;
       }
 
    if (j < 0) return NULL;
    if (j < strlen(sent)-1)
    {
        for (i=j+1; j<strlen(sent); i++)
            if (*(sent+i) == ' ') break;
        return sent+i-1;
    }
    else
        return sent+j-1;
 
}
 
// Распечатка слов, содержащих данную букву
 
void printWords (char* sent, char lett)
{
    int i,j=0,k=0;
    for (i=0; i<strlen(sent); i++)
    {
        if (*(sent+i)==' ') j=i+1;
        if (*(sent+i)==lett)
        {
            while(1)
            {
                if ((j == strlen(sent)) || (*(sent+j) == ' ')) break;
                cout << *(sent+j);
                j++;
            }
            cout << endl;
            k++;
        }
    }
    if (k == 0) cout << "Not found any words..." << endl;
}
 
int main(int argc, char* argv[])
{
    char* Str="To be or not to be";
    //cout << first(Str,'i') << " " << *(first(Str,'i')) << endl;
    //cout << first(Str,'e') << " " << *(first(Str,'e')) << endl;
    printWords(Str,'e');
    return 0;
}
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
03.08.2013, 20:59  [ТС] #3
Большое спасибо!

using namespace std; забыли
Catstail
Модератор
22537 / 10942 / 1774
Регистрация: 12.02.2012
Сообщений: 18,078
03.08.2013, 21:27 #4
Цитата Сообщение от Kaskera Посмотреть сообщение
using namespace std; забыли
- в VC++ 6.0 он не нужен...
Kaskera
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 34
03.08.2013, 21:30  [ТС] #5
Не знал, пользуюсь Microsoft VS 2008
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2013, 22:46 #6
Цитата Сообщение от Catstail Посмотреть сообщение
в VC++ 6.0 он не нужен...
При таком хедере: #include "iostream.h" (если скомпилируется) он не нужен.
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 02:49 #7
А от моё элегантное решение
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
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <regex>
using std::regex;
using std::regex_search;
using std::smatch;
#include <cctype>
using std::isalpha;
 
char* first(char* str1, char c)
{
    string str(str1);
    unsigned int pos;
    pos=str.find(c);
    if(pos!=string::npos)
        while(isalpha(str[pos]))
            pos++;
    return (str1+pos-1);
}
 
void printWords (string sent, char lett)
{
    string s;
    s="([^ ]*)";
    s+=lett;
    s+="([^ ]*)";
    smatch sm;
    regex rv(s);
    while(regex_search(sent,sm,rv))
    {
        cout <<sm[0]<<endl;
        sent=sm.suffix();
    }
}
 
int main()
{
    char* Str="To be or not to be";
 
    cout <<*first(Str,'n')<<endl;
 
    cout <<"vuvod clov"<<endl;
    printWords(Str,'o');
    cout <<endl;
 
    return 0;
}
Catstail
Модератор
22537 / 10942 / 1774
Регистрация: 12.02.2012
Сообщений: 18,078
04.08.2013, 09:23 #8
Цитата Сообщение от ninja2 Посмотреть сообщение
А от моё элегантное решение
- элегантное решение скромного автора... Такие задачи обычно задают с целью проверки знания базовых алгоритмов. К тому же решение без привлечения регэкспов имеет ту же длину. И в чем элегантность?
Croessmah
04.08.2013, 09:29
  #9

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
И в чем элегантность?
Напихать в Ладу как можно больше всего...
Правда как была никудышкой-погремушкой, так и осталась

Catstail
Модератор
22537 / 10942 / 1774
Регистрация: 12.02.2012
Сообщений: 18,078
04.08.2013, 09:32 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
если скомпилируется
- я некомпилирующихся решений не выкладываю...
Croessmah
04.08.2013, 09:33
  #11

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
я некомпилирующихся решений не выкладываю...
Думаю, имелось ввиду, что "iostream.h: No such file or directory"

ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
04.08.2013, 12:14 #12
Цитата Сообщение от Catstail Посмотреть сообщение
Такие задачи обычно задают с целью проверки знания базовых алгоритмов. К тому же решение без привлечения регэкспов имеет ту же длину. И в чем элегантность?
Это я так просто как бы шутя сказал элегантное решение, я щас как раз главу про строки учу от думаю попробовать написать попытаться так сказать высокоуровневый код решил, хочу еще знания РВ востановить, я их когда то отлично знал, в пхп использовал сильно, от как раз интересное задание, ну и решил код выложить, да еще в С++ <regex> вроде как функциональнее чем функции семейства preg в php.
РВ - это сила с ними можно забыть про функции find, replace класса string.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.08.2013, 19:42 #13
Цитата Сообщение от Catstail Посмотреть сообщение
- я некомпилирующихся решений не выкладываю...
Я не вам, я Kaskera. У него, наверное, не компилировалось (хотя, как там в 2008 студии с iostream.h, не заню)...
Цитата Сообщение от Croessmah Посмотреть сообщение
Думаю, имелось ввиду, что "iostream.h: No such file or directory"
Именно это.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 19:42
Привет! Вот еще темы с ответами:

Определить объединение из двух полей. Первое поле - массив из четырех байт, второе - двойное слово - C++
Определить объединение из двух полей. Первое поле - массив из четырех байт, второе - двойное слово. Ввести случайное число в диапазоне от...

Программа, удаляющее последнее слово, выводит первое слово. Что не так? - C++
#include &lt;iostream&gt; using namespace std; int main() { char s; int i = 0; cout &lt;&lt; &quot;stroka: &quot;; cin &gt;&gt; s; for(i =...

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

Определить объединение из двух полей Первое поле - массив из двух байт, второе - слово - C++
Помогите написать программу( лучше с комментариями чтобы разобраться) Определить объединение из двух полей Первое поле - массив из двух...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.08.2013, 19:42
Ответ Создать тему
Опции темы

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