gpt4 book ai didi

c - 在 C 中混合命令行字符串

转载 作者:行者123 更新时间:2023-11-30 16:59:21 27 4
gpt4 key购买 nike

这是作业,所以我不是在寻找直接答案,而是在寻找其背后的逻辑。我不认为这个问题对于新手 C 开发人员来说表述得不太好,而且我在这里找不到任何资源来帮助我。我是 C 语言新手,更是 Java 爱好者,所以这看起来完全是新手。说明如下

  • $ ./mixedupecho 你好!
  • .H/EmLiLxOe!dHuEpLeLcOh!oH*
  • 对于此程序,您可以忽略前两个参数之外的任何命令行参数(包括程序名称本身):
  • $ ./mixedupecho 你好!更多拉拉拉
  • .H/EmLiLxOe!dHuEpLeLcOh!oH*
  • 注意“你好!”比“./mixedupecho”短,因此程序“环绕”
  • 只要到达字符串末尾,就从“H”重新开始。*
  • 如何实现这一点?模 % 运算符是您的 friend 。
  • 具体来说,请注意“HELLO!”[5] 会生成“!”,而“HELLO!”[6] 超出了数组范围。
  • 但是“HELLO!”[6 % 6] 的计算结果为“HELLO!”[0],结果为“H”。
  • “HELLO!”[7 % 6] 的计算结果为“HELLO!”[1] ...

下面是我到目前为止的代码。这会迭代我得到的 argv 字符串的每个字符。我不明白的是如何打印它,而不是序列 [0][0], [0][1], [0][2]... 我得到 [0][0], [ 1][0]、[0][1]...等

有人可以向我解释一下吗?

int main(int argc, string argv[])
{
for(int i = 0; i < argc; i++)
{

for(int j = 0, n = strlen(argv[i]); j < n; j++)
{
printf("%c", argv[i][j]);
}
}
printf("\n");

}

非常感谢!这让我发疯!

最佳答案

您想要保留索引i递增,直到等于最长字符串中空终止符的索引。同时,您将使用%运算符(operator)确保i保持在较短字符串的边界内。

我的做法是这样的:

  1. 将初始(无符号)长度设置为 -1U以避免不必要地计算长度。我将使用LIMIT对于这个示例的其余部分,就好像我这样做了 #define LIMIT -1U .
  2. 迭代字符串,检查以确保 argv[N][i] % len[N]不是空终止符。如果它是空终止符并且 len[N] == LIMIT ,设置len[N] = i .
  3. 当表达式 len[0] != LIMIT && len[1] != LIMIT为 true 时,循环结束,因为两个字符串都具有正确的长度,这意味着每个字符串中的所有字符都已被枚举。

剩下的唯一一件事就是打印每个字符串的字符,我相信你可以处理。我会使用 0作为初始长度,除非这会使事情变得复杂,因为你不能这样做 x % 0 。无符号长度的原因是-1U结果是 unsigned int值(例如 4294967295 或 65535);普通-1结果 x % -1 ,这是没有意义的,因为除以 -1 不会产生余数。

关于c - 在 C 中混合命令行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com