【问题标题】:How to implement the rearranging of an array in C?如何在C中实现数组的重新排列?
【发布时间】:2014-04-05 13:01:16
【问题描述】:

我有一个名为 cc 的字符串:

char cc[49] = { "rrrrrrrrbbbwwwgggyyybbwwggyybbbwwwgggyyyoooooooo" };

我正在尝试重新排列并将其组合成一个更长的字符串(我知道这不起作用):

char Intermediary[120] = {
    { ("nn%c%c%cn", (cc[29], cc[40], cc[46])) },
    { ("nnn%c%cn", (cc[39], cc[47])) },
    { ("nnn%c%c%c", (cc[38], cc[48], cc[37])) },
    { ("nn%c%cnn", (cc[21], cc[28])) },
    { ("nnn%cn%c", (cc[27], cc[26])) },
    { ("n%c%c%cnn", (cc[1], cc[9], cc[20])) },
    { ("n%cn%cnn", (cc[2], cc[19])) },
    { ("n%cn%cn%c", (cc[3], cc[18], cc[17])) },
    { ("nn%cn%cn", (cc[30], cc[44])) },
    { ("nnnn%c%c", (cc[45], cc[36])) },
    { ("n%c%cnnn", (cc[4], cc[10])) },
    { ("n%cnnn%c", (cc[5], cc[16])) },
    { ("%cn%cn%cn", (cc[32], cc[31], cc[41])) },
    { ("%cnnn%cn", (cc[33], cc[42])) },
    { ("%cnnn%c%c", (cc[34], cc[43], cc[35])) },
    { ("%cn%cnnn", (cc[23], cc[22])) },
    { ("%cnnnn%c", (cc[24], cc[25])) },
    { ("%c%c%cnnn", (cc[12], cc[6], cc[11])) },
    { ("%c%cnnnn", (cc[13], cc[7])) },
    { ("%c%cnnn%c", (cc[14], cc[8], cc[15])) },
};

printf("%s", Intermediary);

这将产生以下输出:

ooybybyyogbgoogwgwrg

与应该出来的相反:

nnbyonnnnyonnnnyognnbynnnnnyngnrbynnnrnynnnrnyngnnbnonnnnnognrbnnnnrnnngwnbnonwnnnonwnnnogwnbnnnwnnnngwrbnnnwrnnnnwrnnng

我做错了什么?我查看了 StackOverflow 上的各种论坛帖子,但似乎都没有帮助我。我已经用 Python 重写了代码(它可以工作),但是 Python 到 C 的转换器会为像我这样的 C 菜鸟生成无用的长代码:(。任何形式的帮助都将不胜感激,或者,如果你感觉非常慷慨,在下面发布示例代码/功能。提前谢谢你:)。

编辑:

假设 Deduplicator 的推荐,我的代码现在看起来像这样:

printf("nn%c%c%cn", cc[28], cc[39], cc[45]);
printf("nnn%c%cn", cc[38], cc[46]);
printf("nnn%c%c%c", cc[37], cc[47], cc[36]);
printf("nn%c%cnn", cc[20], cc[27]);
printf("nnn%cn%c", cc[26], cc[25]);
printf("n%c%c%cnn", cc[0], cc[8], cc[19]);
printf("n%cn%cnn", cc[1], cc[18]);
printf("n%cn%cn%c", cc[2], cc[17], cc[16]);
printf("nn%cn%cn", cc[29], cc[43]);
printf("nnnn%c%c", cc[44], cc[35]);
printf("n%c%cnnn", cc[3], cc[9]);
printf("n%cnnn%c", cc[4], cc[15]);
printf("%cn%cn%cn", cc[31], cc[30], cc[40]);
printf("%cnnn%cn", cc[32], cc[41]);
printf("%cnnn%c%c", cc[33], cc[42], cc[34]);
printf("%cn%cnnn", cc[22], cc[21]);
printf("%cnnnn%c", cc[23], cc[24]);
printf("%c%c%cnnn", cc[11], cc[5], cc[10]);
printf("%c%cnnnn", cc[12], cc[6]);
printf("%c%cnnn%c", cc[13], cc[7], cc[14]);

【问题讨论】:

  • C 中没有神奇的插入。您必须为此调用函数,例如 printf。
  • @Deduplicator 好的,我现在已经实现了大量的“printf”。我应该如何保存最终的字符串?用“sprintf”替换“printf”?
  • 不知道你的代码现在是什么样子的。将其添加到问题末尾的分隔符之后?
  • @Deduplicator,完成:)
  • 所以,现在你直接打印了。或者您是否想要其他东西,在这种情况下您需要同一系列的其他功能?

标签: c arrays formatting printf


【解决方案1】:

C 中没有魔法插入。

相反,您必须手动创建字符串,例如使用 printf 等函数。

sprintf 适合格式化为缓冲区,fprintf 适合打印到文件,还有很多有用的变体。

【讨论】:

  • sprintf 是否过度写入缓冲区或连接它?
  • 它总是覆盖你指向的缓冲区的内容。虽然你可以给它一个指向缓冲区某处的指针,所以没关系。另外,请确保缓冲区有足够的空间,所以可以改用snprintf...
猜你喜欢
  • 2021-01-28
  • 2015-07-12
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2021-05-29
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多