我的程序有什么错误来扭转字符串中单词的顺序?

时间:2016-04-23 13:28:10

标签: c

我在C中编写了一个程序来反转字符串中每个单词的顺序。但我没有得到所需的输出。我得到一些奇怪的输出,打印出最后一个单词,然后是随机位置的许多特殊字符。请帮帮我。

#include<stdio.h>
#include<string.h>
void main()
{
    int i,n,m;
    char a[100];
    printf("Enter your sentence");
    gets(a);
    n=strlen(a);
    m=n-1;
    for(i=m;i>=0;i--)
    {
        if(a[i]==' '||a[i]=='\0')
        {
            printf(" ");
            for(;a[i]!=' '||a[i]!='\0';i++)
            {
                printf("%c",a[i]);
            }
        }
    }
}

输出应该是&#34; stackoverflow就是这个&#34;如果我输入&#34;这是stackoverflow&#34;。

2 个答案:

答案 0 :(得分:0)

for(;a[i]!=' '||a[i]!='\0';i++)

这应该改为

for(;a[i]!=' '&& a[i]!='\0';i++)

尝试以下代码

`

#include <stdio.h>
#include <string.h>
void main()
{
    int i,n,m,j;
    char a[100];
    printf("Enter your sentence: ");
    gets(a);
    n=strlen(a);
    m=n-1;
    for(i=m;i>=0;i--)
    {
        if(a[i]== ' '){
            for(j=i+1;(a[j]!=' ') && (a[j]!='\0');j++)
                printf("%c",a[j]);
            printf(" ");
            }
        else if(i==0){
            for(j=i;(a[j]!=' ') && (a[j]!='\0');j++)
                printf("%c",a[j]);
            }
    }
}

`

答案 1 :(得分:0)

您的代码似乎特别难以理解,我认为您应该做一些像这样的事情:

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

#define MAGIC_NUMBER 100

int is_separator(char c)
{
    return c == ' ' || c == '\t' || c == '\n';
}

int main()
{
    char input[MAGIC_NUMBER];
    char output[MAGIC_NUMBER];

    printf("Enter your sentence\n");

    if (fgets(input, MAGIC_NUMBER, stdin) == NULL)
    {
        printf("No input!\n");
        return 1;
    }

    // Length of input line
    int n = strlen(input);

    // let set i be the position of previous found word
    int i = n;

    // let first_word be 1 as long as output is empty
    int first_word = 1;

    // Let's initialize output as a empty string
    strcpy(output, "");

    while (i > 0)
    {
        // Searching last character of next word
        int j = i;
        while (j > 0 && is_separator(input[j - 1]))
        {
            j--;
        }

        // Searching first character of next word
        int k = j;
        while (k > 0 && !is_separator(input[k - 1]))
        {
            k--;
        }

        if (k < j)
        {
            // Adding a new word
            if (first_word)
            {
                first_word = 0;
            }
            else
            {
                // If it is not first found word, insert a space
                strcat(output, " ");
            }

            strncat(output, input + k, j - k);
        }

        i = k;
    }

    printf("%s\n", output);

    return 0;
}