所以这是一个有趣的问题。
填写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++;
}
有更好的解决方案吗?
答案 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;
}