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

замещение слова в текста - 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; delete a; a=new char; // выделяет на 02EF4B50 // при этом значения по адресу 02EF2DD0 остаются неизменными
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. Просмотров 412. Ответов 0
Метки (Все метки)

написала такую программу, нужно заменить в тексте одно слово или символ другим,
eсть replacestring function котрою я вызываю дважды. В первый раз всё проходит нормально а второй replacestring(text, "*", ""); выдаёт не тот текст который бы мне хотелось. Если можно намекните пожалуста почему так получается. Спасибо заранее.


Код
#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 секунд
прошу проигнорировать пост, я всё исправила.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru