字符串中的单词倒置,将“ding nice”改为“nice ding”
请问一下,为什么下面代码运行的结果是,"nice gnid"
这块代码 改成如下:
reverse(arr, start, end -1);
if (arr[end] == ' ')
start = end + 1;
else
start = end;
该回答引用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,表示字符串的结束符,不应该参与倒置。
已解决
将代码改为
解决方案: 首先,出现"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。