Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 10
1

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

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

Author24 — интернет-сервис помощи студентам
Дан многострочный текст (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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2011, 23:14
Ответы с готовыми решениями:

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

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

Я хочу себе поставить еще один кулер, но незнаю как?
Я хочу себе поставить еще один кулер, но незнаю как? если куплю незнаю какой провод засунуть в...

Проблемы с компом, незнаю почему, хочу апнуть, незнаю как
Мой компьютер на данный момент: Мамка: H-alpinia-rs780l-uatx-101 Проц: AMD Athlon(tm) II x3...

0
20.06.2011, 23:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2011, 23:14
Помогаю со студенческими работами здесь

Как поставить условие?
как поставить услови, что если фраза не начинается на &quot;http://&quot; то тогда переписать эту перепенную,...

Как в запросе поставить условие ?
День добрый. Запутался. Есть запрос в запросе получаем даты когда человек ушел в отпуск ...

Как правильно поставить условие?
Сделал для бота функцию для управления компом через консоль, задумка была такая: отсылаешь ему...

Как поставить условие для CheckBox ?
Нужно поставить условие для чекбокса, если галочка стоит, то выводит одно значение, а если нет то...

Как поставить условие для Checkbox?
Всем привет)Как сделать что бы пока 1 го checkbox-а не отметили 2 ой не появлялся &lt;td&gt; ...

Как поставить условие на проверку координат pictureBox
Как поставить условие на проверку координат пикчебокса? Что-то то типо этого:...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru