Usuwanie cyfr z cstringa

0

Witam. Program ma z cstringa usunac wszystkie cyfry. Usuwa tylko czesc cyfr zamiast wszystkich. Widzi ktos blad?

#include<iostream>
using namespace std;
int main()
{
	char x[] = "siem34664el42794ksdajf2342";
	char * pocz = x;
	for (char * i = pocz; i < pocz + strlen(x); ++i) if (*i >= '0' && *i <= '9') for (char * j = i; j < i + strlen(i); ++j) *j = *(j + 1);
	cout << x << endl;
	return 0;
} 
2
#include <cctype>
#include <iostream>
using namespace std;

int main()
  {
   char x[] = "siem34664el42794ksdajf2342";
   char *wr=x;
   for(char *rd=x;*rd;++rd) if(isdigit(*rd)) *(wr++)=*rd;
   *wr=0;
   cout<<x<<endl;
   return 0;
  }

Tak beznadziejnego algorytmu nie da się naprawić.

  1. Brak dołączenia <cstring> więc ma prawo się nie kompilować
  2. Masz koszt O(n4) kiedy da się zrobić O(n)
  3. W przypadku natrafienia na cyfrę kolejny znak pomijasz bez sprawdzenia
  4. Kopiowanie nie uwzględnia znaku końca napisu.
0

@sztukers

Tak jak napisał **_13th_Dragon **"W przypadku natrafienia na cyfrę kolejny znak pomijasz bez sprawdzenia". Dla ciągu str = "a12b" gdy w str[1] trafisz na cyfrę przesuwasz podciąg od str[2] do końca o jedną pozycję "do tyłu" ( *j = *(j + 1) ). W ten sposób utworzonym ciągu "a2b" w następnej iteracji sprawdzasz element str[2] czyli w tym przypadku 'b' pomijając sprawdzanie '2'.

1 użytkowników online, w tym zalogowanych: 0, gości: 1