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

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

Войти
Регистрация
Восстановить пароль
 
Wes11
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 10
#1

Замена слов в строке - C++

25.12.2010, 21:32. Просмотров 574. Ответов 5
Метки нет (Все метки)

Программа берет данные из файла. Далее должна заменять Все слова н1 на н2. Однако получается только для первого найденного слова.

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
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
 
FILE *input,*output;
char *string=(char*)calloc(256,sizeof(char));
char *r,*p;
int i,j;
char n1[256];
char n2[256];
int main(void)
  {
    
    clrscr();
 
    input=fopen("input.txt","r+");
    if (input==NULL)
      {
         printf("Error! Can't open file input.txt");
         getch();
     exit(0);
      }
    
    printf("Please insert word in file input.txt: ");
    scanf("%s",&n1);
 
    printf("Please insert new word: ");
    scanf("%s",&n2);
    
    while(!feof(input))
      {
    fscanf(input,"%c",&string[i]);
    i++;
      }
 
    printf("size of file - %d\n",i);
 
    
    p=strstr(string, n1);
    if(p==NULL)
    {
        printf("\ntext have not this word");
        getch();
        exit(0);
      } 
  
    p[0]='\0';
    p--;
    //strtok(string," ");
    r=strdup(string);
    r=strcat(r,n2);
    r[strlen(r)]='\0';   
    r=strcat(r,p+strlen(n1)+1);  
    printf("\n%s",r);
free(string);
getch();
return 0;}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена слов в строке (C++):

Замена слов в строке - C++
Добрый вечер. Помогите, пожалуйста советом или кодом: требуется полученную строку изменить так, чтобы первое и среднее слово поменялись...

Замена слов в строке - C++
Собственно, сама задача: С клавиатуры вводится некоторый текст. Потом вводится слово(1) которое нужно заменить и слово(2) на которое...

Замена слов в строке - C++
Помогите с заданием. Дана строка символов S. Каждое второе слово в строке заменить символ тире. Код, который не работает(( ...

Замена слов в строке - C++
Можно ли как-то в строке например Заменить все слова &quot;много&quot;, как это сделать ?

Удаление и замена слов в строке - C++
Здравствуйте! Помогите, пожалуйста написать программу! Дана последовательность строк. Каждая строка состоит из слов, разделенных...

Замена слов в строке на другое слово - C++
Не могу понять в чём ошибка, вроде бы всё логично, но при работе программа выдаёт 3 ошибки и не выполняется(то есть слова я ввожу и всё) ...

5
Element_1
3 / 2 / 1
Регистрация: 30.09.2010
Сообщений: 19
25.12.2010, 23:56 #2
1. в Visual Studio 2008 выдает 16 ошибок - надо подключить #include <stdio.h>
2. вы забыли инициализировать переменную i, перед ее использованием надо сделать i=0;

На самом деле можно вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    p=strstr(string, n1); 
    if(p==NULL)
    {
        printf("\ntext have not this word");
        getch();
        return 0;
      }  
    do
    {
        strncpy (p,n2,strlen(n2)); 
        p=strstr(string, n1); 
    } while (p!=NULL);  
 
puts (string);
0
Wes11
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 10
26.12.2010, 00:08  [ТС] #3
Извините, что сразу забыл уточнить: длины слов в общем случае не совпадают.
0
Element_1
3 / 2 / 1
Регистрация: 30.09.2010
Сообщений: 19
26.12.2010, 00:31 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Эм. Первое, что приходит в голову заключить ваш отрывок кода в цикл while-do ))))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
p=strstr(string, n1);
 if(p==NULL)
{
 printf("\ntext have not this word");
 getch();
 exit(0);
 }  
    do {
    p[0]='\0';
    p--;
    r=strdup(string);
    r=strcat(r,n2);
    r[strlen(r)]='\0';   
    r=strcat(r,p+strlen(n1)+1); 
    strcpy(string,r); 
    p=strstr(string, n1); 
   } while (p!=NULL);
printf("\n%s",r);
И.. о чудо это работает!!111
1
Wes11
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 10
26.12.2010, 00:41  [ТС] #5
Должно быть проблема в оболочке, при запуске из под borland'а выдает ошибку
0
Element_1
3 / 2 / 1
Регистрация: 30.09.2010
Сообщений: 19
26.12.2010, 00:54 #6
Цитата Сообщение от Wes11 Посмотреть сообщение
Должно быть проблема в оболочке, при запуске из под borland'а выдает ошибку
Дело не в оболочке, а в том как вы работаете с переменными. Объявите r как
char *r=(char*)calloc(256,sizeof(char));
И вместо r=strdup(string); которая у меня выдает <Bad Ptr> используйте просто strcpy(r,string);
1
26.12.2010, 00:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2010, 00:54
Привет! Вот еще темы с ответами:

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

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву - C++
Определить количество средних слов в строе и какое из слов начинается на большую по коду букву. Напишите плз код данной программы...

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

Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение. - C++
Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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