输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变, 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如,输入“I am a student.”,则输出“student. a am I”。
思想:相翻转句子内的每个单词,再翻转整个句子。
#include <stdio.h>
#include <stdlib.h>
void reverseString(char* s, int prev, int end) {
while (prev < end) {
char c = s[prev];
s[prev++] = s[end];
s[end--] = c;
}
}
void retateString(char* s, int len) {
if (!s) {
return;
}
int prev = 0;
int i = 0;
if (len == 1) {
return;
} else if (len > 1) {
for (i = 0; i <= len; i++) {
if (s[i] == ' ' || s[i] == '\0') {
if (i - prev > 1) {
reverseString(s, prev, i - 1);
}
prev = i + 1;
}
}
reverseString(s, 0, len - 1);
}
}
int getStringLength(char* s) {
int i = 0;
if (s == NULL) {
return 0;
} else {
while (s[i++] != '\0')
;
}
return --i;
}
int main(void) {
char s[] = "I am a student.";
retateString(s, getStringLength(s));
puts(s);
return EXIT_SUCCESS;
}
该博客介绍了一个算法,用于翻转输入英文句子中单词的顺序,同时保持单词内部字符的顺序不变。通过遍历句子,找到单词边界并翻转,最后翻转整个句子,实现了"I am a student."到"student. a am I"的转换。
2474

被折叠的 条评论
为什么被折叠?



