填写空白:反转原始字符串而不询问给出的内容?

时间:2017-08-13 00:43:35

标签: c string data-structures puzzle

所以这是一个有趣的问题。

  

填写while循环的空白,而不使用程序中已经给出的任何额外变量或函数来反转输入字符串。

#include<stdio.h>
int main()
{
    char ch[100];
    scanf("%s",&ch);
    int i=0;

    while( /*condition */ )
    {
       /*
       write code
       */
       i++;
    }

    printf("\n\n Reversed String: %s",ch);
    return 0;
}

编辑

我的方法:

while(i < printf("%s",ch)/2)
{
       ch[i] = ch[printf("%s",ch)-1-i] + ch[i];
       ch[printf("%s",ch)-1-i] = ch[i] - ch[printf("%s",ch)-1-i];
       ch[i] = ch[i] - ch[printf("%s",ch)-1-i];
       i++;
}

有更好的解决方案吗?

3 个答案:

答案 0 :(得分:2)

这个解决方案使用了交换两个整数X和Y而没有临时变量的技巧:

int x = 7;
int y = 11;
x = x ^ y;
y = x ^ y;
x = x ^ y;
// x and y are now swapped.

这是完整的代码。

#include<stdio.h>
int main()
{
    char ch[100];
    scanf("%s",&ch);
    int i=0;

    while(i < strlen(ch)/2)
    {
        ch[i] = ch[i] ^ ch[strlen(ch)-i-1];
        ch[strlen(ch)-i-1] = ch[i] ^ ch[strlen(ch)-i-1];
        ch[i] = ch[i] ^ ch[strlen(ch)-i-1];

        i++;
    }

    printf("Reversed String: %s\n",ch);
    return 0;
}

这是我在5年多来写的第一个C代码。

答案 1 :(得分:1)

apply plugin: 'realm-android'

答案 2 :(得分:0)

所以这是BLUEPIXY建议的对我的解决方案的更好更新。 使用snprintf()代替printf()。我认为这是解决问题的理想方法。

//Reverse a string
#include<stdio.h>
int main()
{
    char ch[100];
    scanf("%s",&ch);
    int i=0;

    while(i < snprintf(NULL,0,"%s",ch)/2)
    {
       ch[i] = ch[snprintf(NULL,0,"%s",ch)-1-i] + ch[i];
       ch[snprintf(NULL,0,"%s",ch)-1-i] = ch[i] - ch[snprintf(NULL,0,"%s",ch)-1-i];
       ch[i] = ch[i] - ch[snprintf(NULL,0,"%s",ch)-1-i];
       i++;
    }

    printf("Reversed String: %s\n",ch);
    return 0;
}