每日一题:反转英文句子

反转英文句子的意思是将句子中按顺序排好的单词的顺序颠倒过来,例子如下: 输入: wo shi zhong guo ren 输出: ren guo zhong shi wo 直观的解法是先将每个单词提取出来,然后计算每个单词反转后所的位置,最后将单词填到相应的位置上。这种方案不仅占用辅助空间,并且计算复杂。另一种方案是将整个句子看做一个字符串,先反转字符串字母的顺序(包含空格),,然后再一次反转每个单词的字母顺序。反转单词字母的意思是: 输入:wo shi zhong guo ren 输出:ner oug gnohz ihs ow 下面看第二种思路的代码:

;void ReverseString(char str[],int start,int end){for (int i = start,j = end; i < j; ++i,–j){char c = str[i];str[i] = str[j];str[j] = c;}}void ReverseString(char str[]){int length = strlen(str);ReverseString(str,0,length – 1);}void ReverseSentence(char str[]){ReverseString(str);vector<int> splitIndex;int length = strlen(str);//记录下单词分隔符的位置(空格),句首放置一个虚拟空格splitIndex.push_back(-1);for (int i = 0; i < length; ++i){if(str[i] == ‘ ‘)splitIndex.push_back(i);}//句尾放置一个虚拟空格splitIndex.push_back(length);int count = splitIndex.size() – 1;for (int i = 0; i < count; ++i){ReverseString(str,splitIndex[i] + 1,splitIndex[i+1] – 1);}}int _tmain(int argc, _TCHAR* argv[]){char str[] = “wo shi zhong guo ren”;cout<<str<<endl;ReverseSentence(str);cout<<str<<endl;return 0;}

程序运行截图:

该程序只考虑英文字母输入,并且不考虑标点符号,所有单词以空格分开。

己欲立先立人,已欲达先达人。

每日一题:反转英文句子

相关文章:

你感兴趣的文章:

标签云: