2011-08-29 97 views
-2

我想以特定格式反转字符串。例如,"My name is Nishant"应转换为"Nishant is name My"反转C中字符串的位置

+1

到目前为止你有什么? – Codo

+2

Dup of [Reversing words in a sentence](http://stackoverflow.com/questions/3276582/reversing-words-in-a-sentence),[c反转一个句子的程序](http://stackoverflow.com/questions/4705069/c-program-on-reversing-a-sentence) – outis

+2

你有什么特别的...哦,对,皮埃尔说科多是什么。 – slezica

回答

1

如果你有一个char[] words排列你的话那么它就是一个简单的循环:

for (i = 0; i < mid; i++) 
    exchange(words[i], words[number_of_words - i]); 

midnumber_of_wordsexchange理智的定义。

如果您拥有的是包含整个声明的大字符,则首先执行strtok会很有帮助。然后,使用上面的循环。

+0

嗨... Mihai居然应该在C中完成,而不使用C lib函数 – Nishant

+0

在此先感谢 – Nishant

+0

这个想法是一样的。 –

0

向您的导师表达您的问候。如果这是一项家庭作业,您应该自己编写代码。

这里有一点提示,虽然:使用char指针遍历数组中的每个字符,直到您在最后点击NUL终止符。现在反向迭代,直到你遇到一个空间。将你的位置保存在另一个指针中,向前移动一个,然后将每个字符复制到输出缓冲区,但不包括NUL。

现在检索那个你保存你的位置的其他指针中最后一个空间的位置,然后再次备份。当你向前移动时,当遇到NULL - ASCII'\ 0'或零字节的空间时,实际上需要停止 - 而不仅仅是NUL。

如果您在开始时迭代前进时将某些列表中的每个空格的位置保存起来,那会更快一些。这样,您就不需要在整个字符串上向后迭代,并且每个单词都有很短的迭代次数。代码会更复杂一点。

对于像个人英语句子这样的短字符串,提高的效率并不重要,但是您将很多正在读取的大文件反转到内存中。