// JIEFA_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void swap(char *a,char *b){
char *temp;
*temp=*a;*a=*b;*b=*temp;
}
//void swap(char a,char b){
// char temp;
// temp=a;a=b;b=temp;
//}////0xC00000FD: Stack overflow
void movestr(char *str){
/*
char *p=str;
cout<<*p<<endl;///a
cout<<*str<<endl;///a
cout<<strlen(str)<<endl<<strlen(p)<<endl; ///10 ////10
*/
//char *p=str;
//char *q=str;
//int i;
//++p;////p从1号元素往后指
//cout<<strlen(p)<<endl;///9
bool flag=false;
int i;
for(i=0;i<strlen(str)-1;i++){
if(str[i]!='*'&&str[i+1]=='*'){ /////遇到a*就交换,遇到*a不处理
swap(str[i],str[i+1]);/////数组元素直接做实参,传递引用,要用*point
flag=true;
}
}//for
if(flag==false){
cout<<"移动后的字符串是:"<<str<<endl;
}else{
movestr(str);/////第一遍可能不完全,可能有*b没处理,需要递归
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char str[] = "**a*b**c***d**";///*str = "**a*b**c***d**";这两个区别很大!要使用*str,swap()无效果
movestr(str);
//swap(str[0],str[1]);
//cout<<str;
system("pause");
return 0;
}
//移动后的字符串是:**********abcd
//请按任意键继续. . .