C语言 你怎样颠倒句子中的词序?

db2dz4w8  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(120)

任务是颠倒句子中单词的顺序我能够颠倒单词的顺序,但问题是单词中字母的顺序也会改变
例如:猫和狗
我的计划中的奇迹:战术DNA神
所需输出:狗和猫
如何修复代码以使其正常工作?
这是我代码:

void revSent(char str[]) {
    int i;
    int n = strlen(str);
    char letter;

    for (i = 0; i < n / 2; i++) {
        letter = str[i];
        str[i] = str[strlen(str) - i - 1];

        str[strlen(str) - i - 1]=letter ;
    
    }
}
isr3a4wc

isr3a4wc1#

你可以用空格分隔句子,然后你可以对结果数组进行反向排序。

k97glaaz

k97glaaz2#

通常的方法是反转整个字符串,然后分别反转字符串中的每个单词。
要提取字符串中的单词,可以使用标准字符串函数strspnstrcspn
这是一个演示程序

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

void reverse_n( char *s, size_t n )
{
    for (size_t i = 0; i < n / 2; i++)
    {
        char c = s[i];
        s[i] = s[n - i - 1];
        s[n - i - 1] = c;
    }
}

char *revSent( char *s )
{
    const char *blank = " \t";

    reverse_n( s, strlen( s ) );

    for (char *p = s; *p; )
    {
        p += strspn( p, blank );

        if (*p)
        {
            size_t n = strcspn( p, blank );
            reverse_n( p, n );
            p += n;
        }
    }

    return s;
}

int main( void )
{
    char s[] = "cats and dogs";

    puts( s );
    puts( revSent( s ) );
}

程序输出为

cats and dogs
dogs and cats

相关问题