Ф-ция со строками

Тема в разделе "C/C++/C#", создана пользователем Again, 22 дек 2010.

  1. Again

    Again Гость

    Составить функцию Zam (s, p, q, n), которая в строке символов s заменяет все вхождения подстроки p на не более чем n символов подстроки q. Стандартные функции для работы со строками не использовать.
     
  2. Again

    Again Гость

    Предпологается, что в s достаточно места для размещения суммарной строки.
     
  3. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (C++):
    #include <stdio.h>

    //
    // Составить функцию Zam (s, p, q, n), которая в строке символов s заменяет все вхождения подстроки p
    // на не более чем n символов подстроки q. Стандартные функции для работы со строками не использовать.
    //
    // Предпологается, что в s достаточно места для размещения суммарной строки.
    //

    int slen( char s[] )
    {
    int i = 0;
    while ( *s++ ) i++;
    return i;
    }

    int scmp( char a[], char b[], int n )
    {
    for (; *a == *b && --n; a++, b++ );
    return n == 0;
    }

    void sput( char s[], char a[], int n )
    {
    while ( n-- ) *s++ = *a++;
    }

    void Zam( char s[], char p[], int n, char q[] )
    {
    int i;
    for ( i = 0; i < slen( s ) - n; i++ ) {
    if ( scmp( &s[i], p, n ) ) {
    sput( &s[i], q, n );
    }
    }
    }

    int main()
    {
    int     n;
    char    s[1000], p[100], q[100];

    printf( "Vvedite stroku s: " );
    scanf( "%s", s );

    printf( "Vvedite podstroku p: " );
    scanf( "%s", p );

    printf( "Vvedite podstroku q: " );
    scanf( "%s", q );

    printf( "Vvedite n: " );
    scanf( "%d", &n );

    Zam( s, p, n, q );

    printf( "Resultat: %s\n", s );

    return 0;
    }
     
Загрузка...

Поделиться этой страницей