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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
kluz
0 / 0 / 0
Регистрация: 28.01.2009
Сообщений: 26
28.01.2009, 11:45     Заменить в строках первое слово на другое #1
задание такое:
задан текст, содержащий произвольное кол-во строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации(перенос слов не используется). Сформировать новый текст, который является результатом след. преобразования исходного текста:
заменить в строках (содержащих заданное слово) первое слово на другое заданное слово.
попыталась написать программу, но не получается замена слова именно в той строке, где найдено заданное слово (в 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';
                           }
 
              }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2009, 11:45     Заменить в строках первое слово на другое
Посмотрите здесь:

C++ В строках поменять местами первое и последнее слова
C++ Распечатать количество вхождений заданного слова в каждую строку и заменить его на другое заданное слово
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово. C++
Заменить в строке одно слово на другое, заданное с клавиатуры. C++
Заменить в строке одно слово на другое, заданное с клавиатуры. C++
Даны два слова.Верно ли,что первое слово начинается на ту же букву,на которую заканчивается второе слово (работа с символами строки) C++
C++ Первое слово текста заменить тремя звездочками
Даны два слова.Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово C++
C++ Заменить в тексте одно слово на другое
Заменить выбранное вами слово на другое слово C++
C++ Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово?
C++ Заменить первое слово строки тремя звездочками

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YurA_280784
Заблокирован
28.01.2009, 12:14     Заменить в строках первое слово на другое #2
По быстрому поглядел и могу сказать, что у тебя 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 символа, вот
kluz
0 / 0 / 0
Регистрация: 28.01.2009
Сообщений: 26
28.01.2009, 13:01  [ТС]     Заменить в строках первое слово на другое #3
спасибо за ответ)
но flag2 у меня в case 3 изменяется, и все идет по ветке else))

проблема в том, что замена правильно не получается
YurA_280784
Заблокирован
28.01.2009, 15:17     Заменить в строках первое слово на другое #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Немножко разобравшись подправил код, правда использую сканф, эта функция чувствительна к разным табуляторам, но я думаю доработать см ввод легко.
Вобщем кида скриншот работы, экзешку, ну и сам код...
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 Кб, 19 просмотров)
Тип файла: rar zamena.cpp.rar (1.1 Кб, 20 просмотров)
YurA_280784
Заблокирован
28.01.2009, 15:18     Заменить в строках первое слово на другое #5
Если всё ок не забываем СПС...
Yandex
Объявления
28.01.2009, 15:18     Заменить в строках первое слово на другое
Ответ Создать тему
Опции темы

Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru