如何在不实际更改它的情况下重新排列char *(索引方式)的开头?

时间:2011-12-13 22:13:42

标签: objective-c c char permutation

我有一个char * string1 =“HELLOPEOPLE”,我有另一个char *部分=字符串+5。因此,部分指向“PEOPLE”记忆中的位置。我的问题是如何在不改变string1的情况下将部分变为“PEOPLEHELLO”。

我问这个是因为我正在研究Burrows Wheeler变换的循环排列。例如,从单词PLAY(示例单词)中获取这样的矩阵。

PLAY
YPLA
AYPL
LAYP

有没有办法在不改变PLAY的情况下获得YPLA,只需使用索引(对内存中的点的引用) ?

3 个答案:

答案 0 :(得分:4)

你不能。

但是,您可以打印portionstring1

的前5个字符
printf("%s%5.5s\n", portion, string1);

portion

之前打印string1portion部分
int len = portion - string1;
printf("%s%*.*s\n", portion, len, len, string1);

答案 1 :(得分:0)

除非您创建新字符串并按所需顺序复制部分,否则不能这样做。

答案 2 :(得分:0)

您可以使用C标准库中的strncpystrncat

 char *target = calloc(strlen(string1)+1, 1)
 strncpy(target, portion, 6);
 strncat(target, string1, 5);
 portion = target;    /* Sets portion to be HELLOPEOPLE */