【发布时间】:2011-11-07 09:59:26
【问题描述】:
我正在尝试将句子中的单词顺序颠倒过来,例如:
这句话是倒过来的。
变成
反转。是单词句子这个
这是我到目前为止所拥有的,几乎可以正常工作: 我使用 strrev 函数反转字符串,然后使用 inprev 函数将每个单词单独发送到 strrev 函数,将它们反转回原始方向,但顺序相反。 为 strrev 函数的开头和结尾发送一个指针可能看起来有点傻,但它允许在 inprev() 中使用相同的函数,发送一个指向单个单词开头和结尾的指针。
#include <stdio.h>
#include <string.h>
void strrev(char * start, char * end);
void inprev(char * start);
int main(void)
{
char str[] = "Foobar my friends, foobar";
char * end = (str + strlen(str) -1);
puts(str);
strrev(str, end);
puts(str);
inprev(str);
puts(str);
return 0;
}
void strrev(char * start, char * end)
{
char temp;
while (end > start)
{
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
void inprev(char * start)
{
char * first = start;
char * spcpnt = start;
while (*spcpnt)
{
while (*spcpnt != ' ' && *spcpnt)
spcpnt++;
strrev(start, spcpnt-1); // removing the -1 sends the space on the
start = spcpnt++; // other side to be reversed, doesn't stop
// the problem.
}
}
这是输出:
Foobar 我的朋友们,foobar
raboof ,sdneirf ym rabooF
foobarfriends,我的 Foobar
问题是最后一个单词的末尾缺少最后一个空格意味着该单词和最后一个字符串中的前一个单词之间缺少一个空格,而是被扔到最后一个单词的末尾,这是原始字符串中的第一个单词。发送单词另一侧的空格只会将问题转移到其他地方。任何人都可以看到解决方案吗?
【问题讨论】:
-
遇到X空格怎么办?它们属于之前还是之后的词?
-
+1 好问题 :)。如果我有一点时间,我会提供一个解决方案
-
我猜你不想让第一个字母变大,正如你的例子所示......
-
@RedX 没想到,我再看看我的算法,想办法
-
@imacake 正确,错字。谢谢。