2014-11-29 3 views
0

У меня есть char array называется names[50]как укоротить несколько первых символов массив символов C++

В основном, я использую

strncpy(this->names, names, sizeof(names)) 

однако это только укоротить символы в конце.

Как обрезать символы с самого начала?

Например, BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge должен быть teveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge

+0

Что вы имеете в виду? –

+0

@VladfromMoscow Я думаю, что они ищут подстроки с левого или правого конца. Если вы знакомы с Python, например slicing '[: 5]' или '[-5:]' например – CoryKramer

+0

, используйте 'std :: copy (имена + i, имена + j, names.begin())' – vsoftco

ответ

0

Вы можете изменить адрес источника для strncpy:

strncpy(this->names, &(names[10]), num_of_chars_to_copy); 

Обратите внимание, что ни один нуль-символ не неявно добавляется в конце строки назначения, если источник строка длиннее num.

1

Если я правильно понял, то, используя строку, которую вы показали в качестве примера, вы должны написать

strncpy(this->names, names + 5, sizeof(names) - 5); 
+0

Но что произойдет, если имя «60», тогда оно должно удалить первые буквы «10». Количество символов может быть разным каждый раз, скажем, что '70' он должен удалить' 20' с самого начала. –

+0

@Rews Prog. Вам нужно указать необходимое количество символов, которые вы хотите пропустить с самого начала. –

0

Вы должны быть ясно, что вы хотите сделать ... это имена [] переменной длиной от позвонить? Это -> имена фиксированной длины? Обратите внимание, что длина для количества байтов для копирования должна быть количеством байтов, доступных в этом -> именах ... В противном случае вы рискуете переполнять память.

0

Я разработал для вас этой простой функции, Вы можете использовать его в качестве справочного кода для более сложного вопроса:

void BackStrCopy(char* src, char* dest, int srcsize, int destsize) 
{ 
    if(srcsize >= destsize) 
    { 
     do 
      dest[destsize--] = src[srcsize--]; 
     while(destsize + 1); 
    } 
} 

int main() 
{ 
    char* src = "BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge"; 
    char dest[50]; 
    BackStrCopy(src, dest, strlen(src), 25); 
} 

Я проверил это конец работы.

Я считаю, что код функции не требует комментариев :) Если мое решение поможет вам, не забудьте проверить его как ответ.

Ciao

Смежные вопросы