如何重新排列 char* 的开头和结尾(索引方面)而不实际更改它?

发布于 2024-12-21 02:14:25 字数 308 浏览 1 评论 0原文

我有一个 char* string1 = "HELLOPEOPLE",还有另一个 char* 部分 = string+5。所以部分指向“PEOPLE”在内存中的位置。我的问题是如何在不更改 string1 的情况下使部分成为“PEOPLEHELLO”。

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

PLAY
YPLA
AYPL
LAYP

有什么方法可以在不改变 PLAY 的情况下获得 YPLA,只需使用索引(引用内存中的点) ?

I have a char* string1 = "HELLOPEOPLE", and I have another char* portion = string+5. So portion points to the location in memory of "PEOPLE". My question is how can I get portion to be "PEOPLEHELLO" without changing string1.

I am asking this because I working on the cyclic permutations for the Burrows Wheeler Transform. For example is to get a matrix like this from the word PLAY (Example word).

PLAY
YPLA
AYPL
LAYP

Is there any way I can get YPLA without changing the the PLAY, just using indexes (references to points in memory)
?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绝對不後悔。 2024-12-28 02:14:26

你不能。

但是,您可以打印 portionstring1 的前 5 个字符

printf("%s%5.5s\n", portion, string1);

,或者打印 portionstring1 的部分在部分之前

int len = portion - string1;
printf("%s%*.*s\n", portion, len, len, string1);

You cannot.

You can, however, print portion and the first 5 characters of string1

printf("%s%5.5s\n", portion, string1);

Or print portion and the part of string1 before portion

int len = portion - string1;
printf("%s%*.*s\n", portion, len, len, string1);
情痴 2024-12-28 02:14:26

您不能,除非您创建一个新字符串并按所需顺序复制其中的部分。

You can't, unless you create a new string and copy in it the portions in the desired order.

别在捏我脸啦 2024-12-28 02:14:26

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

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

You can use strncpy and strncat, from the C standard library:

 char *target = calloc(strlen(string1)+1, 1)
 strncpy(target, portion, 6);
 strncat(target, string1, 5);
 portion = target;    /* Sets portion to be HELLOPEOPLE */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文