题目:以首尾交换的方法交换字符串中以’A’开头和以’N’结尾的单词
输入:AM I OLDER THAN YOU
输出:THAN I OLDER AM YOU
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
void exchange(const char *pln,char *pOut)
{
//思路为设置两个标志位 分别指向两个要交换的单词首位 一开始置-1
int flag_A=-1,flag_N=-1;//
int i = 1;
int j = strlen(pln) - 1;
if(*(pln)=='A')//先排除 第一个单词 和最后一个单词
flag_A = 0;
if(*(pln+j)=='N')
{
int v = j;
while(*(pln+v-1)!=' ')
v--;
flag_N = v;
}
--j;
while(i<strlen(pln))//寻找标志位
{
if(flag_A==-1)
if(*(pln+i)=='A'&&(*(pln+i-1)==' '))
flag_A = i;
++i;
if(flag_N==-1){
if(*(pln+j)=='N'&&(*(pln+j+1)==' ')){
int v = j;
while(*(pln+v-1)!=' ')
v--;
flag_N = v;
}
}
--j;
}
int a,b;
a = flag_A > flag_N?flag_A:flag_N;
b = flag_A < flag_N?flag_A:flag_N;
for(int t=0,k=0;k<strlen(pln);++k,++t){//开始复制 尚未优化
if(k==b&&a!=-1){
for(int f = a;*(pln+f)!=' '&&f<strlen(pln);++f,++t){
*(pOut+t) = *(pln+f);
}
*(pOut+t) = ' ';
while(*(pln+k)!=' '&&k<strlen(pln))k++;
continue;
}
if(k==a&&b!=-1){
for(int f = b;*(pln+f)!=' '&&f<strlen(pln);++f,t++){
*(pOut+t) = *(pln+f);
}
*(pOut+t) = ' ';
while(*(pln+k)!=' '&&k<strlen(pln))k++;
continue;
}
*(pOut+t) = *(pln+k);
}
}
int main()
{
char a[20] = "AM I OLDER THAN YOU";
char b[20];
exchange(a,b);
// for(int i=0;i<20;i++)
printf("%s",b);
return 0;
}