【问题标题】:Reversing a word in C and then storing that reversed word to use in a printf在 C 中反转一个单词,然后存储该反转的单词以在 printf 中使用
【发布时间】:2021-11-24 08:55:43
【问题描述】:

所以基本上我正在尝试反转一个单词(一个单词,而不是一个包含多个单词的字符串)并且我已经设法使用这个来反转这个单词

{
    int end, x;
    end = strlen(myString) - 1;
    for (x = end; x >= 0; --x) {
        printf("%c", myString[x]);
    }
}

(myString 在代码的其他地方定义)

但这是踢球者,我需要像这样打印反转的单词:

printf("The word reversed is '%c'", myString);

而且我不知道如何实际将 for 循环反转的单词放入第二个 printf 命令中。有什么想法吗?

【问题讨论】:

  • 改用%s
  • 只是没有打印任何东西
  • 检查是\0字符串的第一个字符,应该保留在末尾,添加它以表示没有更多文本
  • 如果myString 包含n 字符,那么myString[0] 的字符需要成为myString[n - 1] 的字符,反之亦然。您通常会使用一个临时变量来存储其中一个字符,然后用另一个字符替换它,最后将另一个字符设置为临时字符。对myString[1]myString[n - 2] 等重复此操作,只需从 0 迭代到 n / 2。

标签: c for-loop printf reverse c-strings


【解决方案1】:

你来了。

for ( size_t i = 0, n = strlen( myString ); i < n / 2; i++ )
{
    char c = myString[i];
    myString[i] = myString[n - i - 1];
    myString[n - i - 1] = c;
}

printf("The word reversed is '%s'\n", myString);

【讨论】:

  • 你有一些小错别字。 mtString -> myString 和 \n' 之前而不是之后。
  • 是的,我修正了错别字,它成功了,谢谢:D
  • @Cheatah 谢谢。我已经更新了代码。
【解决方案2】:

如果您传递的字符串是文字而不是分配的指针,您需要将字符串反向复制到分配的缓冲区中。如果您试图避免损坏原始字符串,这同样适用。

// allocate a buffer big enough to hold a copy of the string
int len = strlen(myString);
char* reverse = malloc(len+1);

// reverse copy it over.
for (size_t i = 0; i < len; i++)
{
    reverse[i] = myString[len-1-i];
}
reverse[len] = '\0'; // null terminate our new string

printf("Reversed word: %s\n", reverse);

// free the string when you are done with it
free(reverse);

【讨论】:

  • 这是我最后一次在我的代码中使用字符串,所以在反转后字符串包含什么并不重要
猜你喜欢
  • 2018-05-19
  • 2013-04-07
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多