【问题标题】:string reverse without new array没有新数组的字符串反转
【发布时间】:2010-03-19 05:54:35
【问题描述】:

你好,谁能告诉我这个错误?

#include<stdio.h>

int main()
{
    char a[]="abcdefgh";
    int i=0;
    int n=strlen(a);
    char *first;
    char *second;
    char *c;
    *first=a[0];
    *second=a[7];
    for(i=0;i<=n/2;i++)
    {
            *c=*first;
            *first=*second;
            *second=*c;
            first++;
            second--;
    }

    for(i=0;i<=7;i++)
    {
            printf("%c",a[i]);
    }
}

【问题讨论】:

  • 没有人会帮你解决这个烂摊子。稍加努力并体面地格式化它。
  • 您能否提供更多关于错误是什么的信息?
  • 我只想说这是作业,如果不是,请原谅我。另外,我很高兴你在寻求帮助之前尝试了这个问题,谢谢。也就是说,当您遇到错误时,告诉我们该错误是什么很重要。如果不是编译错误,请告诉我们您得到的结果以及您想要的结果。

标签: c string arrays


【解决方案1】:

问题在于以下几行:

*first=a[0];
*second=a[7];

我认为你想要的是让firstsecond 指向正确的元素,即:

first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element

您所拥有的是将a[0] 的值分配给first 指向的地址,该地址未初始化。此外,您也可以在此处使用n - 1 而不是 7,因此您不必对大小进行硬编码。还有这些行:

*c=*first;
*first=*second;
*second=*c;

你看,指针c 也没有被初始化。您应该做的不是将c 作为指针:

char c;

然后像普通变量一样使用它:

c = *first;
*first = *second;
*second = c;

只是一个设计说明,你不需要计数器/for循环。相反,你知道你已经完成了 second 是 first (也就是说,我们处于或已经越过中点):

while (second > first)

最后,通过那里的一些空间!您的代码非常紧凑且难以阅读。不要害怕把事情分开。

【讨论】:

  • GMan,你这家伙。先修好,后抱怨……你一定是你办公室的福气。
  • @Potatoswatter:呵呵,谢谢。 :) 还没有办公室,还在上学。 :P @Codeguru:没问题。如果您发现问题已解决,请单击答案上的复选标记。
  • @Potatoswatter,他是我的福气,GMan 教我 C++ 并继续帮助我提高编码能力。他是一个优秀的同学:)
【解决方案2】:
    *first=a[0];

指针first 未初始化,因此您分配给无效内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多