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

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

Войти
Регистрация
Восстановить пароль
 
Melodie
3070 / 309 / 5
Регистрация: 02.06.2009
Сообщений: 3,297
#1

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

01.07.2009, 05:05. Просмотров 420. Ответов 0
Метки нет (Все метки)

написала такую программу, нужно заменить в тексте одно слово или символ другим,
eсть replacestring function котрою я вызываю дважды. В первый раз всё проходит нормально а второй replacestring(text, "*", ""); выдаёт не тот текст который бы мне хотелось. Если можно намекните пожалуста почему так получается. Спасибо заранее.
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
#include<stdio.h>
#define CHARS 50 // 20  
 
int main(void)
{
    void replacestring(char*s, char* s1, char *s2);
    
    char text[CHARS];
    
    strcpy(text, " 1* for all and all for 1* ");
 
    replacestring(text, "1", "one");
    replacestring(text, "*", "");
 
    printf("%s\n", text);
return 0;
 
}
 
////////////////////////////////////////////////////////////////
/* function will find and return the length of the string*/
 
int length(char *s)     
{
    char *p=s;
    int i=0;
 
    do{
        ++i;
        ++p;
    }while(*p!='\0');
 
    return (i);
}
 
/////////////////////////////////////////////////////////////////
 
/*function will replace "s1" on "s2" in the string "s"*/
void replacestring(char*s, char* s1, char *s2)
{
    //int length(char *s);
    int findstring(char *s1,char *s2);
    void removestring(char *s,int i,int n);
    void insertstring(char s1[], char s2[], int n);
 
    int match, i;
    
    char *str=s, *find=s1, *replace=s2;
    
/*find location of the 1st char to be removed */    
    match=findstring(str, find);
 
/*find how many chars needs to be removed*/
    i=strlen(find);
 
    removestring(str, match, i);
    insertstring(str, replace, match);
 
}
 
////////////////////////////////////////////////////////////////
 
/*function will insert "s2" into "s1" starting at the matching location*/
 
void insertstring(char s1[], char s2[], int n)
{
    int length(char *s);
    int j=0;
    int i=length(s1);
    int m=length(s2); 
 
/* move characters from where the matching string begins */
/*on (index+length of the inserted string) */
 
    for(j=i; j>=n; --j)
        s1[j+m]=s1[j];
 
/* insert "s2" into "s1" */
    i=n;
    do{
        s1[i]=s2[j];
        ++i;
        ++j;
    }while(s2[j]!='\0');
 
}
 
 
/////////////////////////////////////////////////////////////////
 
/* this function will remove 'i' elements strating from position 'n' */
 
void removestring(char *s,int i,int n)
{
  char *p=s+i;
 
  do {
    *p = *(p+n);
    if (*p != '\0') p++; /* only bump pointer if not finished */
  }
  while (*p != '\0');
 
}
 
 
/////////////////////////////////////////////////////////////////////////////////////
/*  this function will find the first occurance of the
    string "s2" in the string "s1" and return the index
    of the first char in "s1" where the matching string
    begins.                                             */
int findstring(char *s1,char *s2)
{
  char *p1=s1,*p2=s2,*tmp;
 
  do {
    while ((*p1 != *p2)&&(*p1 != '\0')) p1++; /* no match and not end */
    tmp = p1;                                 /* 1st char matched, mark start */
    while ((*tmp == *p2)&&(*tmp != '\0')) {
      tmp++;                                  /* match continues and not end */
      p2++;                                   /* check next char */
    }
    if (*p2 == '\0') return(p1-s1);           /* if end of s2, then match! */
    else {                                    /* index is diff bet addresses */
      p2 = s2;                                /* else reset p1 and bump p1 */
      p1++;
    }
  }
  while (*(p1-1) != '\0');                    /* cont while not at end of p1 */
  return(-1);                                 /* s2 not found */
  
}
Добавлено через 1 час 48 минут 0 секунд
прошу проигнорировать пост, я всё исправила.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2009, 05:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замещение слова в текста (C++):

Напечатать слова, которые отличны от последнего слова текста, предварительно удалив из слова последнюю букву - C++
Дана последовательность содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами не менее...

Задан текст, напечатать слова этого текста отличные от последнего слова - C++
Задан текст.напечатать слова этого текста отличные от последнего слова удалить в каждом из них первую букву. Нужно сделать именно через...

Вывести все слова текста, которые отличны от последнего слова, предварительно преобразовав их - C++
Решить задачу на обработку текста, используя функции работы со строками. Предполагается, что исходным является текстовый файл. В текст...

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

Напечатать все слова из текста, отличные от слова hello. - C++
Добрый день товарищи!!!Выручайте!)Зачет по программированию завтра сдавать,а я не знаю как последнюю лабораторку сделать. Задание...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2009, 05:05
Привет! Вот еще темы с ответами:

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Побитовое замещение - C++
Не могу что-то догнать. Есть int 0x 00 00 00 00 Как наиболее простым способом заместить одну из пар 4 бит другой? set( 1, 0x56 ) ...

Замещение слов в строке - C++
Написать программу замещения первой половины строки второй, а второй – первой. Borland 3.1, но не принципиально. Заранее спасибо.

Замещение и виртуальные функции - C++
Ребят,какой смысл в создание виртуальных функций ,кроме как создание базовых классов объекты которых нельзя создать?Ведь можно просто...


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

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

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