Форум программистов, компьютерный форум 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 namespace std;
C++ Callback функция
Простой вопрос: я правильно понял, сallback-функцией просто называется функция, к которой обращаются по указателю(обычно указатель на нее передают аргументов в другую функцию). Или за этим термином есть еще что-то более?
C++ сортировка методом Бетчера http://www.cyberforum.ru/cpp-beginners/thread323467.html
Напишите алгоритм сортировки массива структур методом Бетчера
C++ Обмен записями между процессами, посредством файла FIFO Я студент и сам программираю на Delphi , но в Академии задачки дают тока на С, С++. А я в нем почти 0... Прошу кто-нибудь сможет написать вот такую вот программу? Заранее спасибо. ------------------------------------------------------------- Ход работы Именованный канал FIFO, следует создать при помощи команды mkfifo. Процесс "писатель", должен открыть этот файл на запись и... подробнее

Показать сообщение отдельно
KapaRZA
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 10
20.06.2011, 23:14     Незнаю как поставить условие
Дан многострочный текст (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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru