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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Си++ Лабораторка http://www.cyberforum.ru/cpp-beginners/thread323496.html
Удалить из s1, ... , sn все слова с нечетными порядковыми номерами и перевернуть все слова с четными номерами. Например, если n=21 и данная последовательность символов представляет собой...
C++ Он-лайн олимпиады по программированию Подскажите, если кто знает, пожалуйста, он-лайн олимпиады по программированию. Прочитал книжки, поделал задачки и примеры, хочется теперь +- реальных заданий попробовать порешать. Знаю только про... http://www.cyberforum.ru/cpp-beginners/thread323486.html
Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? C++
Собсно. То есть ребята, вот пример отсюда: http://www.cplusplus.com/reference/algorithm/count_if/ // count_if example #include <iostream> #include <algorithm> #include <vector> using...
C++ Callback функция
Простой вопрос: я правильно понял, сallback-функцией просто называется функция, к которой обращаются по указателю(обычно указатель на нее передают аргументов в другую функцию). Или за этим термином...
C++ Сортировка массива структур методом Бетчера http://www.cyberforum.ru/cpp-beginners/thread323467.html
Напишите алгоритм сортировки массива структур методом Бетчера
C++ Обмен записями между процессами, посредством файла FIFO Я студент и сам программираю на Delphi , но в Академии задачки дают тока на С, С++. А я в нем почти 0... Прошу кто-нибудь сможет написать вот такую вот программу? Заранее спасибо. ... подробнее

Показать сообщение отдельно
KapaRZA
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 10

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

20.06.2011, 23:14. Просмотров 876. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru