【问题标题】:c programming -reversing individual words in a stringc编程-反转字符串中的单个单词
【发布时间】:2011-01-27 11:54:19
【问题描述】:
#include<stdio.h>
#include<conio.h>
#include<string.h>
main(){

char *c;
char *y;
int len=strlen(c);
int i,k=0,j,m=0,t;
clrscr();
printf("Enter the string :");
gets(c);
printf("%s",c);
for(i=0;i<=len;i++)
{
    if(c[i]==' '|| c[i]=='\0')
    {
        for(j=i-1;j>=m;j--)
        {
            y[k]=c[j];
            k++;
                        }

                       y[k]=' ';

        m=k;
        k++;

    }

}
y[len]='\0';
for(i=0;i<len;i++)
printf("%c",y[i]);

getch();
}

这个程序是为了反转我尝试了很长时间的字符串中的单词。我认为我写的逻辑是正确的,我每次都得到不同的输出.. 有时先前执行的输出将附加到下一个输出中。 谁能告诉我哪里错了

有时我会得到正确的输出,但缺少一个字母。

当我直接打印时我要添加的另一件事“y作为一个数组它即将到来,如果我试图作为指针给出它不会到来 我的意思是

printf("%s",y); //输出不正确

for(i=0;i

我想知道确切的区别

【问题讨论】:

  • 不仅代码没有格式化,甚至还包含注释掉的行,使其难以阅读。
  • 我想知道为什么教育机构仍在使用 Turbo C(conioclrscrgetch 是一个死的赠品)什么时候可以得到GCC免费。哎呀,你甚至可以免费获得 MSVC。
  • 对不起,我......将在下一篇文章中看到格式正确的代码
  • @paxdiablo:: 似乎主要是印度次大陆的大学 - 他们仍然使用 Turbo C 和一些非常糟糕且过时的书籍,例如Kanetkar(“让我们 C”等)。
  • @satheesh,你的赞成票也为零。您可以在这里感谢与您分享知识的人的唯一方法是在特定答案对您有所帮助时对他们的未回答进行投票并接受他们。当您寻求帮助时,请考虑社区。​​span>

标签: c


【解决方案1】:

这个:

char *c;
char *y;
int len=strlen(c);

几乎肯定会导致灾难:c 是一个未初始化的指针,您将它传递给 strlen。您所希望的最佳是立即进行核心转储。

你需要先解决这个问题,如果只是用 kludge:

c = malloc(1000);

还有更好的方法,但可能是您使用该代码所针对的技能水平(不要试图在那里冒犯,只是说明这是 CS101 级别的东西,可能不需要高级用户输入功能)。

【讨论】:

    【解决方案2】:

    我马上看到的问题是您没有初始化变量并且没有为字符串缓冲区分配任何内存。

    char *c;
    int len=strlen(c);
    

    c 在这种情况下没有初始化,计算它指向的字符串的长度会导致不可预知的行为。

    那你就做

    gets(c);
    

    c 应该指向一些由malloc 和朋友分配的内存或指向一个数组(如c[1024])。

    y 也没有初始化。

    【讨论】:

      【解决方案3】:

      首先将所需的内存量分配给 y。您正在从之前的执行中获得结果,因为之前分配的内存可以被重用。所以在不需要的时候释放内存,在需要的时候分配。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多