int DeletePoints( char *String, int StringLength )
{
char *Buff;
int Count = 1;
Buff = ( char* )malloc( sizeof( char )*( StringLength + 1 ));
if( Buff == NULL )
return -1;
Buff[0] = String[0];
for( int i=1; i < StringLength; i++ )
{
if( String != '.' )
{
Buff[Count] = String;
Count++;
}
else
{
if( Buff[Count-1] != '.' )
{
Buff[Count] = String;
Count++;
}
}
}
memcpy( String, Buff, Count );
String[ Count ] = '\0';
free( Buff );
return 0;
}
\С++\Работа со строками
[SIZE=2][FONT=Times New Roman]Даны натуральное число n, s1, …, sn. Преобразовать последовательность [/FONT][/SIZE]
[SIZE=2][FONT=Times New Roman]s1, …, sn заменив в ней: [/FONT][/SIZE]
[SIZE=2][FONT=Times New Roman]каждую из групп стоящих рядом точек одной точкой.[/FONT][/SIZE]
Код:
Buff[0] = String[0];
for( int i=1; i < StringLength; i++ )
{
if( String == '.' && Buff[Count-1] == '.')
continue;
Buff[Count++] = String;
}
for( int i=1; i < StringLength; i++ )
{
if( String == '.' && Buff[Count-1] == '.')
continue;
Buff[Count++] = String;
}
Код:
#include <iostream>
using namespace std;
// функция, возвращающая "правильную" строку
char *dotsfree( char *src )
{
int srclen = strlen(src);
char *dst = new char [srclen];
char *psrc = src, *pdst = dst;
while( *pdst++ = *psrc++ )
{
if( (*psrc == *(pdst - 1)) && (*psrc == '.') )
*pdst--;
}
return dst;
}
// пример использования
int main( void )
{
char *str = "..23...123 .322 codenet..ru";
cout << str << endl;
char *ptr = dotsfree(str);
cout << ptr << endl;
delete [] ptr;
return 0;
}
using namespace std;
// функция, возвращающая "правильную" строку
char *dotsfree( char *src )
{
int srclen = strlen(src);
char *dst = new char [srclen];
char *psrc = src, *pdst = dst;
while( *pdst++ = *psrc++ )
{
if( (*psrc == *(pdst - 1)) && (*psrc == '.') )
*pdst--;
}
return dst;
}
// пример использования
int main( void )
{
char *str = "..23...123 .322 codenet..ru";
cout << str << endl;
char *ptr = dotsfree(str);
cout << ptr << endl;
delete [] ptr;
return 0;
}
P.S. Жутко неоптимальный код. :)
Update: поюзала поиск и нашла код
Код:
void strpack( char* src, char tok = '\0' )
{
char *p = src;
while (*p++)
if (*p != *src || (tok && *p != tok))
*(++src) = *p;
}
{
char *p = src;
while (*p++)
if (*p != *src || (tok && *p != tok))
*(++src) = *p;
}
Конечно, немного не так как здесь но, вроде, ближе к теме.