Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

\С++\Работа со строками

17K
04 февраля 2007 года
S_A_M
10 / / 27.01.2007
[FONT=Times New Roman][SIZE=2](Нужно написать на С++. Лично я делаю на С++5.02.) [/SIZE][/FONT]
[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]
15K
04 февраля 2007 года
kamik
2 / / 16.12.2005
Код:
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;
}
242
04 февраля 2007 года
Оlga
2.2K / / 04.02.2006
просто как вариант, немного изменила решение kamik
 
Код:
Buff[0] = String[0];
 for( int i=1; i < StringLength; i++ )
 {
  if( String == '.' &&  Buff[Count-1] == '.')
      continue;
  Buff[Count++] = String;
 
 }
9
04 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Тоже поучаствую малость ;)

Код:
#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;
}


P.S. Жутко неоптимальный код. :)
242
05 февраля 2007 года
Оlga
2.2K / / 04.02.2006
Update: поюзала поиск и нашла код
http://forum.codenet.ru/showpost.php?p=123865&postcount=2
пробелы меняем на любой нужный символ
9
05 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Посмотрел, Ольга, спасибо. Имхо, невнятно как-то функция написана. Вот тут поднакидал универсалочку, которая заменяет последовательности указанного символа - единичным. Если символ не указан, то "сжимает" все повторяющиеся последовательности:
 
Код:
void strpack( char* src, char tok = '\0' )
{
    char *p = src;

    while (*p++)
    if (*p != *src || (tok && *p != tok))
        *(++src) = *p;
}


Конечно, немного не так как здесь но, вроде, ближе к теме.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог