在翻转句子中的每个单词时如何计算空格?

时间:2017-03-20 22:21:26

标签: c char

基本上这个程序应该从用户那里获取输入并反转句子中的每个单词。所以,如果我曾经" Hello World"应该打印" olleH dlroW",但截至目前它打印" dlroW olleH"。所以我的程序会颠倒整个句子,而不仅仅是特定的单词。不确定如何处理它。我尽了最大努力。

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

void reverse(char *str, int start, int end)
{

    char temp;
    while (start < end)
    {
        if(isspace(str[start]))
        {
            printf("%s ", str);
            start++; 
        }
        else
        {
            temp = str[start];
            str[start] = str[end];
            str[end] = temp;
            start++;
            end--;
        }   
    }       
    return;
}

int main()
{
    char word[256];
    int i=0, bound;
    printf("Enter a string\n");
    fgets(word, 256, stdin);
    printf("%s", word);

    bound = strlen(word);
    reverse(word, i, bound-1);
    printf("%s\n", word);



}

3 个答案:

答案 0 :(得分:3)

跟踪您开始和找到空间的点 - 两个整数。如果你发现一个空格从'start'(第一个字母)到'end'(空格)获得一个子字符串。反转子串并将其放回原始字符串并继续。

答案 1 :(得分:3)

像这样修复

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

void reverse(char *str, int start, int end){
    char temp;
    while (start < end){
        temp = str[start];
        str[start++] = str[end];
        str[end--] = temp;
    }      
}

int main(void){
    char word[256];

    printf("Enter a string\n");
    fgets(word, 256, stdin);
    printf("%s", word);

    size_t pos = 0, start, end;
    do {
        start = (pos += strspn(word + pos, " \t"));
        end = start + strcspn(word + pos, " \t\n");
        reverse(word, start, end-1);
        pos = end;
    }while(start != end);

    printf("%s\n", word);
}

答案 2 :(得分:2)

只需将您的反向方法改为此即可。我希望这会有所帮助。

Invalid format specified <versionLabel> tag

测试结果

  

&#34; Hello World working&#34;反向---&gt;&gt; olleH dlroW gnikrow