Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Nick Deny
2 / 2 / 0
Регистрация: 17.11.2012
Сообщений: 43
#1

Библиотека string.h, функция strcat - C++

04.03.2014, 14:12. Просмотров 1099. Ответов 24
Метки нет (Все метки)

Написал вот такое, но в программе все равно текст не выводит.
Должно работать точно также, как и обычная библиотека strcat.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char * strcat ( char * destination, const char * source )
{
    int size1= sizeof((char*)destination)/sizeof((char*)destination[0]);
    int size2= sizeof((char*)source)/sizeof((char*)source[0]);
    size2=size1+size2;
    int c=0;
    for(int i=size1;i<size2;i++)
    {
        ((char*)destination)[i]=((char*)source)[c];
        c++;
    }
    return ((char*)destination);
}
Где сея ошибка? :\
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2014, 14:12     Библиотека string.h, функция strcat
Посмотрите здесь:

Функция strcat - C++
Нужно написать прогу на C++ и Ассемблере...функцмя strcat(на ассемблере сделал а вот на C++ не могу).Если кто поможет буду очень...

функция strcat - C++
Помогите разобраться, пожалуйста. char* resultat = 0; char* str = &quot;abc&quot;; strcat(resultat, str); вылетает с ошибкой. Как нужно...

функция strcpy и strcat - C++
Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на экран,если оно длиннее определенного,то я...

Что делает функция strcat(t, f) - C++
Функция strcat(t, f) что она делает и как применяеться?

Своя функция strcat, завершение с ошибкой - C++
Здравствуйте, написал свою функцию strcat, она выполняет то, что от нее нужно, но сама программа при этом завершается с ошибкой. void...

Своя функция strcat. Копирует мусор - C++
Не могу как сделать так, что бы копирование происходило несколько раз. char *Copies(const char *s, char *s1, int n) { for...

Собственная функция strcat -сцепление строк - C++
написать собственную функцию strcat -сцепление строк. Сравнить работу функции со стандартной из библиотеки string.h, если таковая...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Deny
2 / 2 / 0
Регистрация: 17.11.2012
Сообщений: 43
04.03.2014, 15:44  [ТС]     Библиотека string.h, функция strcat #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
char * strcat(char * dest, const char * src)
{
    char * r = dest;
 
    while (*dest != '\0')
        dest++;
 
    while ((*dest++ = *src++) != '\0')
        continue;
 
    return r;
}
Хм.. Как теперь сделать из этого strncat?
Пытался поменять '\0' на num - лажа.

p.s.
C++
1
char * strncat ( char * dest, const char * src, size_t num )
DrOffset
04.03.2014, 15:46
  #17

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Имхо, в плюсах писать в условии != 0 (или != '\0', что по сути, то же самое), избыточно
Это в Си избыточно. А в плюсах с его пользовательскими операторами приведения, неявными преобразованиями типов и другими закулисными действиями - это признак заботы о читабельности и четкой регламентированности намерений программиста.
Цитата Сообщение от Tulosba Посмотреть сообщение
И имеет смысл только для новичков, не знающих о правиле преобразования интегральных типов в булев.
bool так то тоже интегральный тип. Кроме того я встречал компиляторы, которые генерили не очень оптимальный код на таких преобразованиях.

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.03.2014, 15:58     Библиотека string.h, функция strcat #18
Цитата Сообщение от Nick Deny Посмотреть сообщение
Как теперь сделать из этого strncat?
добавить счетчик в цикл копирования и выход из цикла при достижении кол-ва символов.

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
bool так то тоже интегральный тип.
да, но внутри if'а всё же интуитивно ожидается булев тип (провожу аналогии с C#, где bool должен быть явным).
Цитата Сообщение от DrOffset Посмотреть сообщение
А в плюсах с его пользовательскими операторами приведения
Пользовательские операторы для пользовательских типов, в данном случае char не получится трактовать как-то ошибочно. Кстати, в качестве типа из стандартной библиотеки можно привести пример с std::ios::operator bool. Добавлен как раз для сокращения записи при проверки условия.

Nick Deny
2 / 2 / 0
Регистрация: 17.11.2012
Сообщений: 43
04.03.2014, 16:02  [ТС]     Библиотека string.h, функция strcat #19
Не выдает ничего, видимо, ошибка в расчете где- то.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char * strncat ( char * dest, const char * src, size_t num )
{
    char * r = dest;
    int c=0;
    while(*dest!='\0')
        c++;
    for(int i=0;i<num;i++)
    {
        dest[c]= src[i];
        c++;
    }
    return r;
}
oh. :\
DrOffset
04.03.2014, 16:08
  #20

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
да, но внутри if'а всё же интуитивно ожидается булев тип
Ожидается да. Я где-то другое утверждал? Я говорю о регламентации своих действий. Да в этом конкретном случае оно будет эквивалентно. Но во многих других - нет. Нет смысла вводить правило, когда исключений больше.

Цитата Сообщение от Tulosba Посмотреть сообщение
Пользовательские операторы для пользовательских типов, в данном случае char не получится трактовать как-то ошибочно.
Но ты первое свое утверждение привел в общем случае ("плюсах писать в условии != 0 (или != '\0', что по сути, то же самое), избыточно"), и я тебе ответил в общем случае.

Цитата Сообщение от Tulosba Посмотреть сообщение
Кстати, в качестве типа из стандартной библиотеки можно привести пример с std::ios::operator bool. Добавлен как раз для сокращения записи при проверки условия.
Ага, а потом появляются идиомы наподобие этой.

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.03.2014, 16:08     Библиотека string.h, функция strcat #21
Nick Deny, сделайте вместо
C++
1
2
while ((*dest++ = *src++) != '\0')
        continue;
так:
C++
1
while (num-- && (*dest++ = *src++));
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
04.03.2014, 16:09     Библиотека string.h, функция strcat #22
Цитата Сообщение от Nick Deny Посмотреть сообщение
Не выдает ничего
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char * strncat(char * dest, const char *src, size_t count)
{
    char * r = dest;
 
    while(*dest != 0)
        ++dest;
 
    char c;
    while((count-- > 0) && ((c = *src++) != 0))
        *dest++ = c;
 
    *dest++ = 0;
 
    return r;
}
Tulosba
04.03.2014, 16:13
  #23

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Ага, а потом появляются идиомы наподобие этой.
С++11 это уже не требует реализовать. Есть явные преобразования типов.
Цитата Сообщение от DrOffset Посмотреть сообщение
Нет смысла вводить правило, когда исключений больше.
Исключения это что? Пользовательские типы? Конечно их будет больше, чем фундаментальных.
Цитата Сообщение от DrOffset Посмотреть сообщение
Но ты первое свое утверждение привел в общем случае
Mea culpa. Имел ввиду встроенные типы.

Nick Deny
2 / 2 / 0
Регистрация: 17.11.2012
Сообщений: 43
04.03.2014, 16:24  [ТС]     Библиотека string.h, функция strcat #24
И последнее. Выдает, что буква 's' найдена в каждом символе.
Код:
C++
1
2
3
4
5
6
7
8
9
10
    cout<<"\n\n= = = = =\nStart!\n\nstrchr:"<<endl;
  char str[] = "This is a sample string";
  char * pch;
  printf ("Looking for the 's' character in \"%s\"...\n",str);
  pch=strchr(str,'s');
  while (pch!=NULL)
  {
    printf ("found at %d\n",pch-str+1);
    pch=strchr(pch+1,'s');
  }
Функция:
C++
1
2
3
4
5
6
7
8
9
10
11
char * strchr (char * str, int character )
{
    char * r=str;
    for(int i=0;i<strlen(str);i++)
    {
        if(str[i]==character)
            return r;
        else
            continue;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 16:33     Библиотека string.h, функция strcat
Еще ссылки по теме:

Библиотека String - C++
Чем плох String? Когда его не стоит использовать?

Строки библиотека string.h - C++
Дана строка символов, состоящая из букв и цифр. Найти количество букв в данной строке. Использовать функции библиотеки string.h

считывание строки( библиотека string) - C++
задача в том чтоб считать сообщение с клавиатуры полностью(русские буквы пробелы знаки всякие). Пытался сделать с помощью string, не...

Библиотека Обработки строк string.h - C++
Задание таково: Разработайте программу работы со строками. Организуйте ввод исходных данных с клавиатуры. Используйте функции из библиотеки...

Библиотека для удобной работы с типом string с++ - C++
Привет, надо проводить много манипуляций со строками - обрезка, перенос строки, выравнивание - для интерфейса 3D-игры. Есть ли готовая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
04.03.2014, 16:33     Библиотека string.h, функция strcat #25

Не по теме:

Tulosba, я просто не вижу смысла в этой краткости, если есть хоть 1%, что из-за нее где-то выстрелит в ногу. Я слишком много проектов перевидел и сидел на поддержке, чтобы так просто этим разбрасываться. Так же самая история с ++i вместо i++ в цикле, для встроенных типов не играет роли. Но зачем всякий раз думать о том, что встроенный тип - это одно, а в случае итератора, может быть оверхед?

В случае встроенных типов на уровне кодогенерации почти всегда будет полный эквивалент. Скатываться в perl-подобный синтаксис из-за каких-то религиозных мотивов?

С++11 это уже не требует реализовать.
Я согласен. Но я еще не видел ни одного программного продукта (именно продукта), который бы не имел обратную совместимость С++03. И это текущих условиях пока что является оправданным.



Добавлено через 6 минут
Цитата Сообщение от Nick Deny Посмотреть сообщение
И последнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
char * strchr(char * sp, int c)
{
    do
    {
        if(*sp == static_cast<char>(c))
        {
            return sp;
        }
    }
    while(*sp++ != 0);
    return 0;
}
Yandex
Объявления
04.03.2014, 16:33     Библиотека string.h, функция strcat
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru