Удаление символа из строки - PullRequest
0 голосов
/ 31 октября 2010

Я хотел написать код, который удалял бы данный символ из строки. Я придумал следующий фрагмент.

Теперь, когда это делает мою работу, это дает мне сложность O в худшем случае (n ^ 2). Может кто-нибудь помочь мне улучшить это.

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void Push(char *, int i);

int n=6;

int main()
{
 clrscr();
 char *p = "helelo";
 char delChar = 'e';

 for(int i=0;i<5;i++)
 {
  if(*(p + i) == delChar)
  {
   Push(p, i);
  }
 }
 cout<<p<<endl;
 getch();
 return 1;
}

void Push(char *p, int i)
{
 for(int k=i;k<n;k++)
 {
  *(p + k) = *(p+k+1);
 }
}

Спасибо

Ответы [ 4 ]

4 голосов
/ 31 октября 2010
#include <cstring>
#include <algorithm>
#include <iostream>

int main() {
  using namespace std;

  char s[] = "helelo";
  cout << s << '\n';

  char *end = s + strlen(s);
  end = remove(s, end, 'e');
  *end = '\0';
  cout << s << '\n';  // hllo

  return 0;
}

Обратите внимание, что вы не можете изменять строковые литералы, поэтому я использовал массив символов. Std :: string будет еще проще.

Если вы хотите понять, как работает std :: remove, инстанцирование char * (так как это шаблон) для простоты будет выглядеть примерно так:

char* remove(char *begin, char *end, char value) {
  char *next = begin;
  for (; begin != end; ++begin) {
    if (*begin != value) {
      *next++ = *begin;
    }
  }
  return next;
}
0 голосов
/ 31 октября 2010

Как насчет:

int main() {
  clrscr();
  char *p = "helelo";
  char delChar = 'e';

  int k=0;
  for( int i=0; *(p+i); i++ ) {
    if(*(p + i) != delChar) {
      *(p + k++) = *(p + i);
    }
  }
  *(p + k) = '\0';
  cout<<p<<endl;
  getch();
  return 1;
}
0 голосов
/ 31 октября 2010

Что-то вроде этого должно сделать это:

char *p = "helelo";
char delChar = 'e';
int len = strlen(p);

for(int j=0, int i=0;i<len;i++)
{
  if(*(p + i) != delChar)
  {
    *(p+j)=*(p+i);
    ++j;
  }
}
 *(p+j)='\0';

 cout<<p<<endl;
 getch();
 return 1;
0 голосов
/ 31 октября 2010

Идея состоит в том, чтобы создать новую строку из первой, используя только допустимые символы (отличные от нежелательных символов), а затем инициализировать первую строку созданной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...