2

我有这个程序

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char text[30];
    int i,j,n;
    puts("Enter the Text:");
    gets(text);
    n=strlen(text);
    for(i=n;i>=0;i--)
    {
       if(text[i-1]==' '||text[i-1]==NULL )
       {
           for(j=i;text[j]!=' ';j++)
           {
               printf("%c",text[j]);
           }
       }

       printf(" ");


    }

    getche();
}

假设如果我输入的是“我很开心”,那么我的输出是“我很开心”

我不确定我在这个程序中哪里出错了,我没有得到所有的话,我得到的结果是“快乐 [=w am”。请程序员帮助我。

提前致谢。

我找到了答案,谢谢你的帮助,下面是我的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char text[100];
    int i,j;
    puts("Enter the Text:");
    gets(text);
    strrev(text);
    for(i=0;text[i]!='\0';i++)
    {
       if(text[i+1]==' ' || text[i+1]==NULL)
       {
           for(j=i;j>=0 && text[j]!=' ';j--)
            printf("%c",text[j]);
       }
       printf(" ");
    }
    getche();
}
4

4 回答 4

4

基本上是 md5 的解决方案,使用递归实现:

#include <stdio.h>
#include <string.h>

void print_upto_space(const char *s)
{
    do {
        putc(*s, stdout);
    } while (*s++ != ' ');
}

void reverse_print(const char *s)
{
    const char *p = strchr(s, ' ');
    if (p == NULL) { 
        printf("%s ", s);
    } else {
        reverse_print(p + 1);
        print_upto_space(s);
    }
}
于 2013-08-18T09:28:18.293 回答
2

您可以使用以下算法:

  1. 将字符串拆分为字符串数组中的单词(比如说A)。
  2. 以相反的顺序打印A

虽然这是O(n)在空间中,但这可能是更简单的算法(因为您的字符串只有 30 个字符长,所以没关系)。

于 2013-08-18T09:22:24.077 回答
1

此解决方案不需要任何额外的内存缓冲区。

首先使用两个指针反转整个字符串。

然后使用另外两个指针遍历字符串并反转每个单词。

于 2013-08-18T09:26:15.703 回答
1

你可以试试这个来反转字符串: -

void reverseWords( char * str )
{
    int i = 0, j = 0;
    reverseString( str, strlen(str) ); 
    while( 1 ) // Loop forever
    {
        if( *(str+j) == ' ' || *(str+j) == '\0') 
        {
            reverseString( str+i, j-i );
            i = j+1;
        }
        if( *(str+j) == '\0')
        {
            break;
        }
        j++;
    }
} 
void reverseString(char* str, int len)
{
    int i, j;
    char temp;
    i=j=temp=0;

    j=len-1;
    for (i=0; i<j; i++, j--)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
    }
}
于 2013-08-18T09:21:48.783 回答