Скопируйте строку из определенного индекса динамически в C
Если у меня есть
char str_cp[50],str[50], str_other[50], str_type[50];
strcpy(str,"how are you : i am fine");
strcpy(str_other, "who are you : may be robot or human being");
strcpy(str_type,"type : worker / manager ");
так как же кодировать... копировать строку из ":" в конец строки? когда я не известен с индексом конца.
3 ответа
Решение
В C копирование с определенного символа в конец строки можно выполнить с помощью strcpy
при условии, что у вас достаточно большой буфер. Все, что вам нужно сделать, это передать указатель на начальный символ, который вы хотите сохранить.
Указатель можно найти с помощью strchr
, как это:
const char *tail = strchr(str, ':') + 1; // skip ':' itself. Add 2 to skip ' ' too
Если вы печатаете tail
, вы получите содержимое оставшейся части строки:
printf("%s\n", tail);
Если вам нужна копия, сделайте это с strcpy
:
size_t len = strlen(tail)+1;
char *copy = malloc(len);
strcpy(copy, tail);
Создайте другой массив размером 50, а затем просто скопируйте
char source[150]; // supoose your sorce array
char dest[150]; // suppose your destination
int i =0,Flag =0,j=0;
for(char c = source[i];c != '\0';i++)
{ if(c == ':')
Flag = 1; // coz we have to start copying from here
if(Flag == 1)
dest[j++]=c; //copying the elements
}
typedef struct string String; //do we suppose you wrote a string buffer
// to avoid mallloc and reallock
char * d_prs(String * buf; char * to_parse)
{
reset_st(buf);// do you suppose you have a macro to reset the buffer
while(*to_parse)
if(*to_parse++==':') break;
if(!*to_parse)return NULL; //if null the str, does not contain ':'
concat_s(buf,to_parse); //the pointer is right initalized...justcpy
return str_toCstring(buf);//a macro to get the data of the buffer
}