您的位置:首页 > 其它

翻转英文句子中单词的顺序

2015-11-09 16:29 351 查看
利用字符串中的索引下标进行定位,先将整个英文句子翻转,而后将每个英文单词进行翻转

/*
*程序说明:将一个英文句子翻转,单词中的字母顺序不变
*程序思路: 先将整个句子翻转,然后将各个单词中的字母顺序翻转
*/

#include <iostream>
#include <string>
using namespace std;

//将从指针begin到end指针之间的字符进行反转,其中也包括begin和end所指向的字符
void reverseWord2(char *begin,char *end){
if(begin == NULL || end == NULL){
return;
}
while(begin < end){
char temp = *begin;
*begin = *end;
*end = temp;
--end;
++begin;
}
}

int main(int argc, char *argv[])
{
char s[] = "I am a student";
reverseWord2(&s[0],&s[strlen(s) - 1]);

cout<<"将整个句子翻转过来之后的新的句子为:"<<s<<endl;

//以空格为分割点,将字符串的每个单词进行反转
int i = 0,j = 0;
while(i != strlen(s)){
while(i != strlen(s) && isspace(s[i])){
cout<<"i++"<<endl;
++i;
}
cout<<"此时的i="<<i<<endl;
j = i;

while(j != strlen(s) && !isspace(s[j])){
cout<<"j++"<<endl;
++j;
}

cout<<"此时的j="<<j<<endl;

cout<<"第一个单词翻转之前为:";
for(int k = i;k < j;k++){
cout<<s[k];
}
cout<<endl;
//此处传参数一定要传入&s[j-1],记住,一定是j-1,不能是j,
//因为reverseWord2这个函数时把从i到j之间的字母翻转过来,包括了j,然而经过while循环之后j已经指向了单词之间的空格
reverseWord2(&s[i],&s[j-1]);

cout<<"第一个单词翻转之后的结果为:";
for(int l = i;l < j;l++){
cout<<s[l];
}
cout<<endl;
cout<<"接下来让i在j的位置的基础上再往前一步,跳过这个空格"<<endl;
i = j;
}

//输出字符串
for(int i = 0;i < strlen(s);i++){
cout<<s[i];
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: