Консультация № 173077
08.10.2009, 23:26
0.00 руб.
0 6 3
Здраствуйте,
Подскажите пожалуйста как можно скопировать содержимое одной строки в другую, начиная с пятого символа исходной строки т.е. если есть строка "stroka123456" то как во вторую строку скопировать "a123456" функции memcpy и strcpy копируют от начала строки как я понел :(
Заранее спасибо.
С Уважением, Станислав.

Обсуждение

Неизвестный
09.10.2009, 06:11
общий
09.10.2009, 07:50
это ответ
Здравствуйте, Станислав.
Я так понимаю из вашего вопроса, строка в программе объявлена примерно в таком виде
Код:
char str[100];

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

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

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

Описание функции
Адреса и указатели
5
Неизвестный
09.10.2009, 06:52
общий
Калеев Владимир Викторович:
Добрый день! В примере у Вас ошибка! Вместо strcpy (&str[5], str2); требуется strcpy (str2, &str[5]);
Поскольку в прототипе char *strcpy (char *dst, const char *src);
dst значает "куда", src - "откуда".
давно
Старший Модератор
17042
808
09.10.2009, 07:52
общий
leonid59:
Хвалю за внимательность и оперативность! Я с утра только править собрался, а Ваш пост уж здесь!
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Старший Модератор
17042
808
09.10.2009, 08:17
общий
это ответ
Здравствуйте, Станислав!
Раз Вы программируете в 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
5
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
09.10.2009, 09:38
общий
Прошу прощения за невнимательность. Не проснулся еще
Неизвестный
09.10.2009, 11:10
общий
это ответ
Здравствуйте, Станислав.

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

Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void main(void)
{
char* s="Stroka1234567890";
printf("%s\n",s+5);
char s2[100];
strcpy(s2,s+5);
clrscr();
printf("%s",s2);
getch();
}
5
Форма ответа