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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ зажатие кнопки http://www.cyberforum.ru/cpp-beginners/thread42601.html
Здраствуйте товарищи. как реализовать: пока на клавиатуре нажата кнопка на экране единичка кнопку отпустили на экране нолик. ключевые слова: пока нажата кнопка, остальное пример. какой оператор...
C++ битовые операции надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере ставила 1, вместо 0 http://www.cyberforum.ru/cpp-beginners/thread42591.html
Не понимаю логики освобождения памяти C++
Не могу понять каким образом освобождается память если ее ячейки всеравно заполнены, и более того в дальнейшем не используются.. char* a=new char; //выделяет на 02EF2DD0 char* b=new char; ...
C++ Площадь наибольшего из прямоугольников матрицы
Дана целочисленная матрица A;i=1,n;j=1,m. Прямоугольником в этой матрице будем называть множество всех элементов A, для которых выполнено 1<=p<=i<=q<=n, 1<=r<=j<=s<=m, где p,q,r,s - натуральные...
C++ пжл решити пример про массив.или памагите http://www.cyberforum.ru/cpp-beginners/thread42542.html
помогите пожалуйста решить задачу про массив. одномерно массиве, состоящем из n целочисленных элементов, вычислить:1)минимальный по модулю элемент массива 2)сумму модулей элементов массива,...
C++ заполнить массив по кругу Нужно заполнить двумерный массив по кругу против часовой стрелки по строкам (последовательностью натуральных чисел), начиная с последнего элемента подробнее

Показать сообщение отдельно
Melodie
3070 / 309 / 5
Регистрация: 02.06.2009
Сообщений: 3,297

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

01.07.2009, 05:05. Просмотров 424. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.