Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1366
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 954
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 936
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Номер выпуска:1405
Дата выхода:14.10.2009, 23:00
Администратор рассылки:Dr_Andrew, Модератор
Подписчиков / экспертов:642 / 167
Вопросов / ответов:1 / 3
IRC-канал по теме:#C

Вопрос № 173077: Здраствуйте, Подскажите пожалуйста как можно скопировать содержимое одной строки в другую, начиная с пятого символа исходной строки т.е. если есть строка "stroka123456" то как во вторую строку скопировать "a123456" функции memc...



Вопрос № 173077:

Здраствуйте,
Подскажите пожалуйста как можно скопировать содержимое одной строки в другую, начиная с пятого символа исходной строки т.е. если есть строка "stroka123456" то как во вторую строку скопировать "a123456" функции memcpy и strcpy копируют от начала строки как я понел :(
Заранее спасибо.
С Уважением, Станислав.

Отправлен: 08.10.2009, 22:26
Вопрос задал: Станислав, 2-й класс
Всего ответов: 3
Страница вопроса »


Отвечает Калеев Владимир Викторович, 6-й класс :
Здравствуйте, Станислав.
Я так понимаю из вашего вопроса, строка в программе объявлена примерно в таком виде
Код:
char str[100];

тогда вам следует воспользоваться функцией
Код:
char *strcpy (char *dst, const char *src);

Т.е. чтобы скопировать всю строку начиная с пятого символа (если считать с нуля), нужно вызвать ее в таком виде
Код:
strcpy (str2, &str[5]);

причем строка str2 должна быть заранее объявлена.
В данном случае с помощью оператора & (взятие адреса), получаем адрес пятого символа (опять же, если считать от нуля) и передаем его в качестве аргумента функции копирования строки.
Также в качестве индекса может использоваться не только константа, но и целочисленная переменная.
Если же вам будет необходимо производить копирование не до конца строки то воспользуйтесь функцией strncpy.
Данный способ подходит только в том случае если вы оперируете С-строками, то есть строками объявленными как массивы символов.

Описание функции
Адреса и указатели
В принципе верно, но перепутали аргументы функции:
Прототип, описанный в заголовочном файле string.h:

char *strcpy (char *dst, const char *src);

* dst — указатель на буфер назначения.
* src — указатель на исходную строку.
-----
∙ Отредактировал: Dr_Andrew, Модератор
∙ Дата редактирования: 09.10.2009, 07:50 (время московское)

Ответ отправил: Калеев Владимир Викторович, 6-й класс
Ответ отправлен: 09.10.2009, 06:11

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255186 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Dr_Andrew, Модератор :
    Здравствуйте, Станислав!
    Раз Вы программируете в Visual C++, который поддерживает STL, начиная ещё с 6-й версии (а уж современные выпуски Visual Studio - тем более), то гораздо удобнее пользоваться не строкой в виде массива символов, а объектом класса string; тогда Вы для копирования подстроки Вы легко можете воспользоваться методом substr класса:

    Код:

    #include <iostream>
    #include <string>
    using namespace std;
    //-----------------------------------------------------------
    int main()
    {
    string sOriginalString = "stroka123456!";
    string sSubString = sOriginalString.substr(6);
    cout << "Оригинальная строка: " << sOriginalString << endl;
    cout << " Подстрока: " << sSubString << endl;
    return 0;
    }


    Вывод программы:

    Оригинальная строка: stroka123456
    Подстрока: a123456

    Ответ отправил: Dr_Andrew, Модератор
    Ответ отправлен: 09.10.2009, 08:17
    Казахстан, Алма-Ата
    Организация: Казахский научный центр карантинных и зоонозных инфекций
    Адрес сайта: Медицинские программы для Linux
    ICQ # 256452186

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255190 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Максим Юрьевич, 6-й класс :
    Здравствуйте, Станислав.

    Понимая, что имя строки является указателем на её начало, можем передать в функцию strcpy сразу указатель на её 5-й элемент. Т. е. имя_строки + 5 и есть строка, начинающаяся с 5-го символа. Для иллюстрации привожу код.

    Приложение:

    Ответ отправил: Максим Юрьевич, 6-й класс
    Ответ отправлен: 09.10.2009, 11:10

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255196 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное