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

Заменить в строках первое слово на другое

28.01.2009, 11:45. Показов 2257. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задание такое:
задан текст, содержащий произвольное кол-во строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации(перенос слов не используется). Сформировать новый текст, который является результатом след. преобразования исходного текста:
заменить в строках (содержащих заданное слово) первое слово на другое заданное слово.
попыталась написать программу, но не получается замена слова именно в той строке, где найдено заданное слово (в 5 case).


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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
#define dlina 30
#define TRUE 1
#define FALSE 0
void getline ( char *line, int n);
void getline2 ( char *line, int n);
int poisk(char *line, char *word);
int strlen (char *s);
int zamena( char *line, char *newline, char *newword);
 
 main(void)
{
int n,i,j,l,flag,flag2;
char **x,**y,c,*p,*line,*word,*newword, *newline,*o,*pline,u,*m ;
flag=0;
flag2=0;
 do
        {  clrscr();
           puts ("\n Viberite punkt iz menu");
           puts ("1-Vvod i vivod ishodnogo teksta");
           puts ("2-vvod slova poisk");
           puts ("3-poisk slova v tekste");
           puts ("4-vvod slova zamena");
           puts ("5-zamena slova v tekste");
           puts ("6-Vihod");
 
           switch (c)
            {
                case '1':
                        printf ("\n vvedite tekst \n");
                            if (line != NULL)
                            free(line); 
                            line = (char *) malloc (dlina * sizeof(char));
                                if (line == NULL)
                                    {
                                        printf ("no free memory");
                                        return 0;
                                    }
 
                       getline (line,dlina);
                       printf("%s",line);
                       puts("\n viberte punkt menu");
 
                       flag=1;
                break;
 
 
 
    
         case '2':
                        printf ("\n vvedite slovo poisk \n");
                            if (word != NULL)
                            free(word); 
                            word = (char *) malloc (dlina*sizeof(char));
                                if (word == NULL)
                                    {
                                        printf ("no free memory");
                                        return 0;
                                    }
                        getline2 (word,dlina);
                        puts("\n viberte punkt menu");
                break;
 
         case '3':       if (!flag)
               printf ("\n Stroka ne vvedena!\n");
             else
               {
                        printf ("\n poisk slova\n");
                        if (poisk(line,word)==TRUE)
                        {
                         puts ("slovo v tekste naideno");
                         flag2=1;
                         }
                        else
                         puts ("ne naideno");
                         puts("\n viberte punkt menu");
                         }
                break;
         case '4':      if (!flag2)
               printf ("\n tekst ne podleshit obrabotke!\n");
             else
               {
                        printf ("\n vvedite slovo, na kotoroe nado zamenit\n");
                            if (newword!= NULL)
                            free(newword); 
                            newword = (char *) malloc (dlina*sizeof(char));
                                if (newword == NULL)
                                    {
                                        printf ("no free memory");
                                        return 0;
                                    }
                        getline2 (newword,dlina);
                        puts("\n viberte punkt menu");
                        }
                        break;
 
         case '5':     if (!flag)
               printf ("\n tekst ne vveden!\n");
             else
               {    if (!flag2)
               printf ("\n tekst ne podleshit obrabotke!\n");
             else
               {
 
                        if (newline!= NULL)
                            free(newline); 
                            newline= (char *) malloc (dlina*sizeof(char));
                                if (newline==NULL)
                                    {
                                        printf ("no free memory");
                                        return 0;
                                    }
                        
                        p=strstr(line,word);
                            printf("\n %s",p);
                        if(p==NULL)
 
                         printf ("\np= %s", newline);
 
                        if(p!=NULL)
                        {
                        u=' ';
 
                        m=strchr(line,u);
                        printf ("\nm= %s", m);
 
                        o=strcat(newword,m);                
                        printf("\no= %s", o);
 
 
                         }
 
                    puts("\n viberte punkt menu");
                  }
               }
 
 
                 break;
 
        case '6':
                break;
        default:
                puts ("\n Takogo punkta net v menu\n");
 
                break;
                };
        c=getche();
    
        }
        while (c!='6');
 
         }
 
 void getline ( char *line, int n)
    {
        int c;
        
         do
         {
        while (--n>0 && (c=getchar())!=EOF && c!='\n\n')
         
           *(line++)=c;
         
        *line = '\0';
               }
               while (strlen(line)!=0);
        }
  void getline2 ( char *line, int n)
    {
        int c;
        
        while (--n>0 && (c=getchar())!=EOF && c!='\n')
 
            *(line++)=c;
 
        *line = '\0';
    }
 
 int poisk(char *line, char *word)
    {
        int A,i,j,g;
 
         j=0;
         A=FALSE;
 
         for (i=0;*(line+i)!='\0' && A==FALSE;i++)
            {  /* poisk sovpadenij pervoi bukvi slova*/
              if (*(line+i)==*(word))
                 {
                   A=TRUE;    /* esli pervaja bukva sovpala*/
                   for (j=1;*(word+j)!='\0' && A==TRUE;j++)
                      {
                        if (*(line+i+j)==*(word+j))
                          A=TRUE; /* esli slovo naideno*/
                        else
                          A=FALSE; /* esli slovo ne naideno*/
                      }
                  }
                    
            }
        return A;
 
        }
 
 
 
   int strlen (char *s)
          {
                char *l=s;
            while (*l!='\0')
                l++;
                return l-s;
          }
 
   int zamena( char *pline, char *newline, char *word)
  
       {       
           puts("\n Zamena \n");
                          while (*(word)!='\0')
                              *(newline++)=*(word++);                       
                          *(newline++)=' ';         
 
                        while (*(pline++)!=' ');
                        /*probel naiden*/                    
                        while (*(pline)!='\0')
                          {
                            *(newline++)=*(pline++);
                            *(newline)='\0';
                           }
 
              }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2009, 11:45
Ответы с готовыми решениями:

В строках, в которых встречается указанное слово, заменить это слово на другое. Ошибка в коде
Ввести текст с клавиатуры, число строк которого строго 12, а также массив разделителей. В строках, в которых встречается указанное слово,...

В строках, в которых встречается указанное слово, заменить это слово на другое, также введённое пользователем
Ввести текст с клавиатуры, число строк которого строго 12, а также массив разделителей. В строках, в которых встречается указанное слово,...

Даны два слова (первое длиннее второго). Заменить во втором слове соответствующее количество символов на первое слово
Даны два слова (первое длиннее второго). Заменить во втором слове соответствующее количество символов на первое слово. вот код но...

4
Заблокирован
28.01.2009, 12:14
По быстрому поглядел и могу сказать, что у тебя flag2 изначально ноликом проинициализирован, ну и что ж ты хочеш чтобы

C++
1
2
3
4
5
6
if (!flag2)
printf ("\n tekst ne podleshit obrabotke!\n");
else
{
//
}
В ветку элс тебя переправлял, неа он буд печатать tekst ne podleshit obrabotke

Добавлено через 2 минуты 52 секунды
А вобще прожка сложновасто написана, трудно анализаировать, лучше обработку твоизх пунктов меню запихни в отдельные подпрограммы раскидала, ну а исходную строку сделала глобальной переменной длиной скажем в 1024 символа, вот
0
0 / 0 / 0
Регистрация: 28.01.2009
Сообщений: 26
28.01.2009, 13:01  [ТС]
спасибо за ответ)
но flag2 у меня в case 3 изменяется, и все идет по ветке else))

проблема в том, что замена правильно не получается
0
Заблокирован
28.01.2009, 15:17
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Немножко разобравшись подправил код, правда использую сканф, эта функция чувствительна к разным табуляторам, но я думаю доработать см ввод легко.
Вобщем кида скриншот работы, экзешку, ну и сам код...
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
int flag    = 0;
int flag1   = 0;
int flag2   = 0;
int flag3   = 0;
 
void p1();
void p2();
void p3();
void p4();
void p5();
 
void zamena(char * str, char * sFnd, char * sRpl);
 
void CleanScreen();
 
char str[1024];
char sFnd[30];
char sRpl[30];
 
void main()
{   
    CleanScreen();
 
    if(flag == 1)
        printf("Ishodnaya stroka vvedena :%s\r\n",str);
    if(flag1 == 1)
        printf("Stroka poiska vvedena    :%s\r\n",sFnd);
    if(flag2 == 1)
        printf("Ishodnaya stroka soderzhit stroky :%s\r\n",sFnd);
    if(flag3 == 1)
        printf("Stroka zameni vvedena    :%s\r\n",sRpl);
 
    printf("\tViberite punkt menu :\r\n");
    printf("1-Vvod i vivod ishodnogo teksta\r\n");
    printf("2-vvod slova poisk\r\n");
    printf("3-poisk slova v tekste\r\n");
    printf("4-vvod slova zamena\r\n");
    printf("5-zamena slova v tekste\r\n");
    printf("dlya vihoda vvedite luboi simvol krome 1 - 5\r\n");
    char chKey = getch();
    bool Ret = true;
    switch(chKey)
    {
        case '1':p1();break;
        case '2':p2();break;
        case '3':p3();break;
        case '4':p4();break;
        case '5':p5();break;
        default:
            Ret = false;
            printf("Vihod iz programmi\r\n");
            break;
    }
    if(Ret)
        main();
}
 
void p1()
{
    printf("Vvedite ishodnuy stroky\r\n");
    scanf("%s",&str);
    if(strlen(str))
        flag = 1;
    else
        printf("Stroka imeet 0 dliny ili ne vvedena\r\n");
}
 
void p2()
{
    if(flag == 1)
    {
        printf("Vvedite stroky poiska\r\n");
    scanf("%s",&sFnd);
    if(strlen(sFnd))
        flag1 = 1;
    else
        printf("Stroka poiska imeet 0 dliny ili ne vvedena\r\n");
    }
}
 
void p3()
{
    if(flag == 1)
    {
        printf("Poisk stroki %s v ishodnoi stroke\r\n",sFnd);
        if(strstr(str,sFnd))
            flag2 = 1;
        else
            printf("Stroka ne soderzhit stroki %s\r\n",sFnd);
    }
}
 
void p4()
{
    if(flag2 == 1)
    {
        printf("Vvedite stroky zameni\r\n");
        scanf("%s",&sRpl);
        if(strlen(sFnd))
            flag3 = 1;
        else
            printf("Stroka zameni imeet 0 dliny ili ne vvedena\r\n");
    }
}
 
void p5()
{
    if(flag3 == 1)
    {
        while(strstr(str,sFnd))
            zamena(str, sFnd, sRpl);
        printf("Stroka posle zameni :\r\n%s\r\n",str);
        printf("Vvedite luboi simvol dlya prodolzheniya\r\n");
        getch();
        flag    = 0;
        flag1   = 0;
        flag2   = 0;
        flag3   = 0;
    }
}
 
void zamena(char * str, char * sFnd, char * sRpl)
{
    char * chRight;
    char * chBuf = strstr(str,sFnd);
    if(chBuf)
    {
        for(int i = 0; i < strlen(sFnd); i++)
            chBuf++;
        chRight = (char *)malloc(strlen(chBuf) + 1);
        sprintf(chRight,"~%s",chBuf);
        chRight++;
        str[strlen(str) - strlen(chBuf) - strlen(sFnd)] = '\0';
        str = strcat(str,sRpl);
        str = strcat(str,chRight);
    }
}
 
void CleanScreen()
{
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;
    GetConsoleScreenBufferInfo(hOutput, &SCRN_INFO);
    
    COORD POS;
    POS.X = 0;
    POS.Y = 0;
    FillConsoleOutputCharacter(hOutput, ' ',
    SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y, POS, NULL);
    FillConsoleOutputAttribute(hOutput, 
        FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE /*цвет*/, 
        SCRN_INFO.dwSize.X*SCRN_INFO.dwSize.Y,POS,NULL);
 
    SetConsoleTextAttribute(hOutput,FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    SetConsoleCursorPosition(hOutput,POS);
}
Миниатюры
Заменить в строках первое слово на другое  
Вложения
Тип файла: rar zamena.exe.rar (15.5 Кб, 21 просмотров)
Тип файла: rar zamena.cpp.rar (1.1 Кб, 22 просмотров)
0
Заблокирован
28.01.2009, 15:18
Если всё ок не забываем СПС...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2009, 15:18
Помогаю со студенческими работами здесь

Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово.
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово.

Ввести строку. Заменить заданное слово на другое слово в строке
Всем доброго. Возможно тему отправила не по адресочку...извиняйте ! В общем очень нужна помощь с составление программы.. помогите...

Заменить слово после заданного слова на другое слово?
Есть задача заменить во всех строках текста слово, расположенное после заданного слова, на другое заданное слово. У меня получается...

В заданной строке первое по порядку самое короткое слово заменить на первое по порядку самое длинное слово
Написать программу, которая в заданной строке первое по порядку самое короткое слово заменяет на первое по порядку самое длинное...

Заменить выбранное вами слово на другое слово
Здравствуйте! Прошу помочь разобраться с ошибками. #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;string.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru