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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
kluz
0 / 0 / 0
Регистрация: 28.01.2009
Сообщений: 26
#1

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

28.01.2009, 11:45. Просмотров 1294. Ответов 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';
                           }
 
              }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2009, 11:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить в строках первое слово на другое (C++):

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

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

Заменить в тексте одно слово на другое - C++
в текстовом файле содержащий код программы на языке С, заменить все вхождения одного заданного пользователем идентификатора на другой

Заменить в строке одно слово на другое, заданное с клавиатуры. - C++
Условие задачи: Заменить в строке одно слово на другое, заданное с клавиатуры. Текст программы: #include&lt;conio.h&gt; ...

Заменить в строке одно слово на другое, заданное с клавиатуры. - C++
Строка: aa1 bb1 cc1 dd1 слово 1: bb1 слово 2: ff1 решение: aa1 ff1 cc1 dd1 Для начинающего программиста, если можно то программу...

Первое слово текста заменить тремя звездочками - 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
Если всё ок не забываем СПС...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2009, 15:18
Привет! Вот еще темы с ответами:

Заменить первое слово строки тремя звездочками - C++
заменить первое слово на 3 звездачки

Распечатать количество вхождений заданного слова в каждую строку и заменить его на другое заданное слово - C++
Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами. Распечатать количество вхождений...

Программа, удаляющее последнее слово, выводит первое слово. Что не так? - C++
#include &lt;iostream&gt; using namespace std; int main() { char s; int i = 0; cout &lt;&lt; &quot;stroka: &quot;; cin &gt;&gt; s; for(i =...

Определить, содержит ли последнее слово строки букву, с которой начинается первое слово - C++
2.) В динамической памяти размещена строка символов. Определить, содержит ли последнее слово строки букву, с которой начинается первое...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.01.2009, 15:18
Ответ Создать тему
Опции темы

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