如何在C编程中反转字符串中的单词而不是字符

时间:2013-08-18 09:15:32

标签: c

我有这个程序

#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();
}

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

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

提前致谢。

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

#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 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:2)

您可以使用以下算法:

  1. 将字符串拆分为字符串数组中的单词(假设为A)。
  2. 以相反的顺序打印A
  3. 虽然在空间中这是O(n),但这可能是更简单的算法(因为你的字符串长度只有30个字符,没关系)。

答案 2 :(得分: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;
    }
}

答案 3 :(得分:1)

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

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

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