这个不是双重循环,没看见第一个for循环后有个分号吗?第一个for循环的作用是找到你所输入字符串s1的最后一个字符(执行完毕后i就等于s1的长度了);第二个for循环的作用是把s1从第一个字符到最后一个字符依次插入s2的最后一个字符到第一个字符.
创新互联凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了成都网站制作、成都网站建设服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。
由于没有给s2的最后加上‘\0’表示字符串结束的字符,所以最后加了个s2[i]='\n'; 语句。如果没有此句输出的结果就可能是是s1的逆序加其他的未知字符串。
只需要将字符数组的前后数据进行交换就行了。
#include stdio.h
#include string.h
char* reverse(char *x)
{
int i, tem, len = strlen(x);
int n = len / 2;
for (i = 0; i = n; i++) // 前后交换数据
{
tem = x[i];
x[i] = x[len - 1 - i];
x[len - 1 - i] = tem;
}
return x;
}
int main()
{
char p[] = "abcdefghijk";
printf("relust = %s\n", reverse(p));
return 0;
}
这是一个很有趣的问题。就这样函数来本身来说,它可能不具备实用性,但的确具有一定的挑战性。
这个问题的描述来看,应该是要实现下面一个函数:
void reverse(char* str);
要求:
1、函数的实现不能定义变量
2、不能使用其它函数(如strlen等,不然直接使用现成函数,这个问题就没意义了)
3、当然也不能定义更多的函数进行辅助
关于第三点,应该是一个隐含的条件,原因是,假如允许定义更多的函数,函数的形参和返回值本身就是一个变量,例如定义一个char* more(char* var1, char var2, int var3),如此,var1、var2、var3以及返回值本身,都是额外的变量,如此问题本身就没有意义了。
另外必须要提到的一点是,不定义新变量,不代表更高的效率或者不消耗更多的空间。
基于以上分析,看了几年前前人的答案,总感觉不太满意,自己做了一个方案,以供玩意(当然不能保证没有人使用过,如有雷同纯属人类思维的一致性)。
代码如下:
void reverse(char* a)
{
if (a[0] a[1])
{
reverse(a + 1);
while (a[1])
{
a[0] ^= a[1];
a[1] ^= a[0];
a[0] ^= a[1];
++a;
}
}
}
示例程序:
#includeiostream.h
void reverse(char* a)
{
if (a[0] a[1])
{
reverse(a + 1);
while (a[1])
{
a[0] ^= a[1];
a[1] ^= a[0];
a[0] ^= a[1];
++a;
}
}
}
int main()
{
char a[] = "0123456";
reverse(a);
coutaendl; // 输出结果:6543210
return 0;
}
char *revstr(char *str, size_t len)
{
char *start = str;
char *end = str + len - 1;
char ch;
if (str != NULL)
{
while (start end)
{
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
return str;
}