Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Anna1997
0 / 0 / 2
Регистрация: 06.02.2015
Сообщений: 2
#1

Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read" - C++

21.03.2015, 15:49. Просмотров 427. Ответов 2
Метки нет (Все метки)

Помогите, пожалуйста, с кодом на с++.
Задание было такое: Дано строку символов. Выяснить, есть ли в ней слова, которые содержат все буквы слова "read". Если нет, то вывести на печать буквы, которых не хватает.

Как можно переделать мой код, что бы не использовались стандартные функции обработки строк?
И вот мой код:
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
#include <cstdlib>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    char *ptr, str[80], *W[20];
    int j, q, i;
    cout<<"\nInput the row: ";
    gets(str);
    cout<<"\nRow of symbols: ";
    puts(str);
 
    j=-1;
    ptr=strtok(str, " ");
    while (ptr!=NULL)
    {
        j++;
        W[j]=ptr;
        ptr=strtok( NULL, " ");
    }
    q=j;
    cout<<"\nWords of the row: \n";
    for (j=0; j<=q; j++)
    {
        cout<<" W["<<j<<"]=";
        puts(W[j]);
    }
    
    for(j=0; j<=q; j++)
    {
         cout << "\nSearch of symbols 'read' at the word '" << W[j] << "'.\t";
         char word[5];
         strcpy(word,"read");
         int counter=0;
         for(unsigned k = 0; k < strlen(W[j]); k++) 
         for(int i = 0; i < 4; i++) 
         {
            if (word[i] == W[j][k]) 
            {
                    word[i] = ' ';
                    counter++;
                    break;
            }
         }
         if (counter == 4)
            cout<<"\nAll characters of \"read\" exist in: '"<<W[j]<<"'";
         else 
         {
            cout<<"Not enough: ";
            for(int i = 0; i < 4; i++)
                if (word[i] != ' ') cout<<word[i];
        }
        cout<<"\n";
    }
    cout << "\n";
 
    system("pause");
    return 0;
}
Зарание спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2015, 15:49
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выяснить, есть ли в заданной строке слова, которые содержат все буквы слова "read" (C++):

Есть ли в строке слова, которые содержат все буквы слова "read"
Помогите пожалуйста с заданием на си. Дано строку символов. Выяснить, есть ли...

Удалить слова из текста, которые содержат все буквы первого слова
Как можно реализовать сие на c++? Не совсем понимаю принцип.

Вывести все слова из S, которые начинаются с буквы "С"
Дана строка S, состоящая из слов, разделённых пробелами, и буква c. Выведите...

Нужно найти слова которые встречаются в буквы "a" "z"
Даны две буквы &quot;a&quot; &quot;z&quot; и текст, нужно найти и вывести те слова в которых...

Дана строка. Указать те слова, которые содержат хотя бы одну букву "k"
C++: дана строка. указать те слова которые содержат хотя бы одну букву k,...

Найти в файле все слова которые содержат двойные буквы
Найти в файле f все слова которые содержат двойные буквы и сложить с них новый...

2
rao
857 / 412 / 158
Регистрация: 02.04.2014
Сообщений: 1,201
21.03.2015, 17:44 #2
У тебя функций то там две всего: strtok и strcpy. Перепиши их вручную и тогда в коде ничего менять не придется.
Вот, я тебе одну написал:

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
char * myStrtok(char *strToken, const char *strDelimit)
{
    static char *pString;
    if (strToken != NULL) pString = strToken;
    if (pString == NULL || *pString == 0) return NULL;
 
    char *pReturnStr = NULL;
    char *pCurrentPos = pString;
    const char *pDelimiter = NULL;
    while (*pCurrentPos != 0)
    {
        pDelimiter = strDelimit;
        while ( *pDelimiter != 0)
        {
            if ( *pCurrentPos == *pDelimiter ) 
            {
                *pCurrentPos = 0;
                pReturnStr = pString;
                pString = pCurrentPos+1;
                return pReturnStr;
            }
            pDelimiter++;
        }
        pCurrentPos++;
    }
    pReturnStr = pString;
    pString = pCurrentPos;
    return pReturnStr;
};
Вторая попроще, наверное справишься.
0
MicM
824 / 483 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 1
21.03.2015, 18:25 #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
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 <iostream>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
using namespace std;
 
int main()
{
    string str;
    getline (cin, str);
    int i = 0;
    bool flag = false;
    map<string, string> obj;
    int max_length_word = -1;
    while (i < str.size())
    {
        if (isalpha (str[i]))
        {
            int j = i;
            string word = "read";
            while (i < str.size() && isalpha(str[i]))
            {
                int find = word.find(str[i]);
                if (find!=-1)
                    word.erase(find, 1);
                ++i;
            }
            if (word.empty())
            {
                flag = true;
                break;
            }
            else
            {
                string substr = str.substr(j, i - j);
                obj[substr] = word;
                int k = substr.size();
                if (k > max_length_word)
                    max_length_word = k;
            }
        }
        else
            ++i;
    }
    if (flag)
    {
        cout <<"Yes\n";
    }
    else
    {
        cout.setf (ios::left);
        cout <<endl <<setw (max_length_word + 10) <<"Word" <<"Nedd letters\n";
        for (map<string, string>::iterator i = obj.begin(); i!=obj.end(); i++)
        {
            cout <<setw (max_length_word + 10) <<i->first <<i->second <<endl;
        }
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2015, 18:25
Привет! Вот еще темы с решениями:

Определить длину каждого слова. Удалить все буквы "а" и "о" с фамилии
3.Написать программу, вводите фамилию, имя и отчество одной строкой. Определить...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые одинаково читаются слева направо и наоборот, например, "АННА", "ШАЛАШ"
Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые...

Введите предложение, в данной строке нужно заменить все слова "погрешность" на "ошибка"
Введите предложение, в данной строке нужно заменить все слова &quot;погрешность&quot; на...


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

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

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