Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
3070 / 311 / 5
Регистрация: 02.06.2009
Сообщений: 3,297
1

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

01.07.2009, 05:05. Просмотров 510. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2009, 05:05
Ответы с готовыми решениями:

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

Вывести на экран те слова, которые отличны от последнего слова текста и первая буква этого слова входит в него еще раз
Помогите, пожалуйста, с заданием. Что-то туговато у меня идет работа со строками. Более менее я...

Замещение текста в одном диве
привет всем. нужна помощь. имеются два дива. в одном(1) меню в другом(2) инфомация. при выборе...

Используя статическое наследование, статическое замещение, виртуальное или динамическое замещение, написать программу-калькулятор
Помогите ребят, препод барыга. пришёл. о языке ни слова. Дал задание и ушёл( это первые две пары...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2009, 05:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести слова текста, которые отличны от первого слова и первая буква слова входит в него ещё раз
Дан текст, содержащий от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между...

Напечатать слова текста в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквойпоследующего слова
В тексте не слов, начинающихся одинаковыми буквами. Напечатать слова текста в таком порядке, чтобы...

Напечатать в алфавитном порядке слова исходного текста, исключив повторяющиеся слова
Напечатать в алфавитном порядке слова исходного текста, исключив повторяющиеся слова. Разделители...

Вывести все слова текста, которые нельзя составить из «ключевого» слова
Помогите пожалуйста,в edit1 вводиться текст нужно вывести все слова текста, которые нельзя...


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

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

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