关于#字符串#的问题,如何解决?

字符串中的单词倒置,将“ding nice”改为“nice ding”
请问一下,为什么下面代码运行的结果是,"nice gnid"

img

img

img

这块代码 改成如下:

        reverse(arr, start, end -1);
        if (arr[end] == ' ')
            start = end + 1;
        else
            start = end;

img

该回答引用chatgpt:


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

void reverseWords(char* str) {
    int len = strlen(str);
    int start, end;

    // 倒置整个字符串
    for (start = 0, end = len - 1; start < end; start++, end--) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
    }

    // 倒置每个单词
    start = 0;
    for (int i = 0; i < len; i++) {
        if (str[i] == ' ') {
            end = i - 1;
            while (start < end) {
                char temp = str[start];
                str[start] = str[end];
                str[end] = temp;
                start++;
                end--;
            }
            start = i + 1;
        }
    }

    // 倒置最后一个单词
    end = len - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}

int main() {
    char str[] = "ding nice";
    reverseWords(str);
    printf("%s\n", str);
    return 0;
}

该方法首先倒置整个字符串,然后再倒置每个单词,最后再倒置最后一个单词。需要注意的是,字符串的最后一个字符是\0,表示字符串的结束符,不应该参与倒置。

已解决
将代码改为

img


本质错误是传参理解错误

img


并不需要-left,传参传递的是固定的数,数组下标变化是由自定义函数实现
所以其实只需要传递两端的下标值

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案: 首先,出现"nice gnid"的情况是因为使用了错误的方法进行字符串倒序,将字符串整体倒置而非单词进行倒置。

    接下来,提供以下两种方法解决该问题:

    方法一:

    我们可以使用python内置的split()方法将字符串分割成单词列表,再使用列表的反转方法reverse()将单词列表进行反转,在将反转后的单词列表合并为一个字符串即可。

    def reverse_words(string):
        words_list = string.split()  # 将字符串按空格分割成单词列表
        words_list.reverse()  # 反转单词列表
        result = " ".join(words_list)  # 将反转后的单词列表合并为一个字符串,单词之间用空格分隔
        return result
    

    方法二:

    我们可以使用正则表达式匹配出单词,并将匹配出的单词列表进行反转,最后将反转后的单词再按照原来的顺序拼接成一个新的字符串。

    import re
    
    
    def reverse_words(string):
        words_list = re.findall(r'\w+', string)  # 使用正则表达式匹配单词,返回单词列表
        words_list.reverse()  # 反转单词列表
        result = ' '.join(words_list)  # 将反转后的单词列表合并为一个字符串,单词之间用空格分隔
        return result
    

    测试代码:

    string = 'ding nice'
    print(reverse_words(string))  # 输出:nice ding
    

    输出结果为:nice ding。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^