Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Незнаю как поставить условие - C++

20.06.2011, 23:14. Просмотров 890. Ответов 0
Метки нет (Все метки)

Дан многострочный текст (char text[20][81]). Определите, есть ли в данном тексте
указанное слово и заключите его в квадратные скобки. Слово – это непрерывная
последовательность букв и/или цифр. Разделителями слов могут быть любые другие
символы.
Реализовать и использовать функцию, которая заключает слово в квадратные скобки:
void markWords(char str[81], const char word[21]);

Входные данные:
str - исходная строка
word - выделяемое слово
Выходные данные:
str - строка с выделенными словами
Реализовать и использовать функцию поиска слова в строке:
int searchWord(const char str[81], const char word[21]);
Входные данные:
str – исходная строка
word – искомое слово
Формат входных данных. [слово] [M] [1-я строка] [2-я строка] и т.д. M – кол-во строк
в тексте, целое число в диапазоне [1, 20].
Формат выходных данных. [1-я строка] [перевод строки] [2-я строка] и т.д; пустые
строки не печатать; если все строки пустые, то напечатайте сообщение «no solution».
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "stdafx.h"
#include "testing.h"
#include <stdio.h>
int searchWord(const char str[81],const char word[21])
{
    int j=0;            //Счетчик цикла
    int isFind=0;       //Флаг наличия в строке искомого слова
    int beginInd;       //Индекс первой буквы искомого слова
    int endInd;         //Индекс первого символа, следущего за словом
    int identity;       //Флаг идентичности найденного слова с искомым
    
    //До конца строки переворачиваем искомое слово
    while (str[j]!='\0')
    {
        //Ищем индекс первого элемента очередного слова
        while (!isalnum(str[j]))
        {
            j++;
        }
        beginInd=j;
 
        //Ищем индекс первого элемента после этого слова
        while (isalnum(str[j]))
        {
            j++;
        }
        endInd=j;
 
        //Проверяем идентичность первых символов очередного слова с искомым
        identity=strncmp(str+beginInd, word, strlen(word));
        
        //Возвращаем индекс вхождения слова в тексте если оно искомое
        if((strlen(word)==endInd-beginInd)&&(identity==0))
        {
            isFind=1;
            return beginInd;            
        }
        
        //Переходим к следующему элементу
        else if(str[j]!='\0')   j++;
    }
 
    //Если слово в строке не обнаружено возвращаем -1
    if(!isFind)
        return (-1);
} 
void markWords(char str[81], const char word[21]) // У МЕНЯ НЕ ПРАВИЛЬНО РЕАЛИЗОВАНА ЭТА ФУНКЦИЯ Т.Е. НАДО ПОСТАВИТЬ УСЛОВИЕ, ЧТО БЫ МОЖНО БЫЛО ПРОВЕРИТЬ ОКРУЖЕНО ЛИ СЛОВО РАЗДЕЛИТЕЛЕМ (РАЗДЕЛИТЕЛЕ ЯВЛЯЕТСЯ ПРОБЕЛ!!! и НИЧТО ДРУГОЕ!) воТ КАК ЭТО СДЕЛАТЬ!?
{
    char *direction;
    char buffer[81]={'\0'};                     // пустой массив для хранения строки в цикле
    const int word_length=strlen(word);         //находим длину строки 
    
    for (int i=0; i<81; i++)
    {
        //присваиваем адрес рассматриваемой ячейки указателю
        direction = &(str[i]);
        if (!strncmp(direction,word,word_length))
        {
            // копируем часть после слова в буффер
            strcpy(buffer,direction+word_length);
            // ставим скобку
            str[i]=('[');
            // копируем слово (и оставщуюся часть строки) на одну ячейку правее
            strcpy(direction+1,word);
            // копируем значение буффера в место после найденного слова (учитывая будущую скобку)
            strcpy(direction+word_length+2,buffer);
            // закрываем скобку
            str[i+word_length+1]=(']');
            // смещаем поиск на +1(+2 в конце цикла),чтобы не наткнуться на это же слово (потому что мы поставили скобку)
            i++;
        }
    }   
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int str = 20;                         // количество строк
    const int smb = 81;                         // количество символов в строке
    int M;                                      // количество...
    char M_char[20];                            // ...строк в тексте
 
    char text[str][smb]={'\0'};                 // пустую матрицу для многострочного текста
    char word[smb]={'\0'};                      // пустой массив для слова
 
    int ok=1,no_line=1,only_white=1;            // объявляем флаги
 
    /* ВВОДИМ */
    // ... слово
    gets(word);
    // ... количество строк в тексте (M)
    input_printf("input M: ");
    gets(M_char);
    M=atoi(
        M_char);
 
    if(M>str||M<1)
    { error_printf("invalid input data"); ok=0; }
    
    if(ok) 
    {
        // ... текст
        for(int i=0; i<M; i++)
        {
            input_printf("input string #%d: ", i+1);
            gets(text[i]);
            // проверка на белые разделители
            int j=0; while(text[i][j]!='\0')
            { 
                if (isalpha(text[i][j])) { only_white=0; }
                // ! РАЗДЕЛИТЕЛЯМИ СЛОВ МОГУТ БЫТЬ ЛЮБЫЕ ДРУГИЕ СИМВОЛЫ 
                // заменяем символы на пробелы | нужно ли?! Второй вопрос!?
                // else text[i][j]=' ';
                j++;
            }
            // если в строке лишь белые разделители,то делаем строку пустой
            if(only_white==1) { text[i][0]='\0'; }
        }
 
        /* ИЩЕМ,ВЫВОДИМ,ПРОВЕРЯЕМ */
        for(int i=0; i<M; i++)
        {
            // ИЩЕМ указанное слово и заключаем его в скобки 
            markWords(text[i],word);
            // ВЫВОДИМ измененный текст
            puts(text[i]);
            // ПРОВЕРЯЕМ не пуста ли строчка*/
            if(text[i][0]!='\0') { no_line=0;}
        }
        // если все строки пустые
        if(no_line) puts("no solution");
    }
    WAIT_ANY_KEY
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2011, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Незнаю как поставить условие (C++):

Как поставить условие - C++
Есть переменные: x1, x2, y1, y2. И нужно сделать следующее: Прибавить к x1 единицу (++x1) в том случае если выполняется одно из условий: ...

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

Поставить рандомную матрицу, перепробовал уже много способов. Как поставить? - C++
нужно чтобы матрицу вводил не я после запуска программы,а она сама появлялась с рандомными числами! #include &lt;iostream&gt; #include...

Незнаю как решить задание - C++
Дано четырехзначное число.Найти: а.)сумму его цифр; б.)произвидение ео цифр. Начал учить С++ только два дня назад!Нужно...

Незнаю как написать функцию - C++
Здравствуйте, есть массив типа int int i = {2, 4, 6}; Нужно написать функцию цикл, которая выведет в консоль это: 2 4 6 2 4 7 2 4...

Незнаю как сделать програмцу на С++ - C++
Я написал програму каторая ищет максимальное значение масыва и его индекс, но тепер нужно ее сделать через указатели.. но я незнаю как....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2011, 23:14
Привет! Вот еще темы с ответами:

Незнаю как написать функцию - C++
Здравствуйте, с Новым Годом! Подскажите пожалуйста как реализовать такую функцию: Есть число 173, в двоичной системе оно имеет вид...

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

Незнаю как написать. Подпрограммы в Си/Си++. Функции. - C++
в первой программе ошибка: #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; void main () { const float da=0.3, dx=2; ...

N человек,сам незнаю как делается?! - C++
13. В магазине стоит очередь из N человек. Время обслуживания i-го покупателя ti – случайная величина, распределенная по закону равномерной...


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

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

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