Скопируйте строку из определенного индекса динамически в 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    

}
Другие вопросы по тегам