int Calculate(char* arr3) { ?? ?if(*(arr3+1)!='\0') ? ? ? ?return 1+Calculate(arr3+1);? ?? ?else ?? ??? ?return 1; }
void reverse2(char* ?arr2) { ?? ?int sz=0;//个数 ?? ?int i=0,j=0; ?? ?while(*(arr2+i)) ?? ?{ ?? ? ? sz++; ?? ? ? i++; ?? ?} ?? ?char tmp; ?? ?for(i=0;i<sz;i++) ?? ?{ ?? ??? ?if(i<sz) ?? ??? ?{ ?? ? ? tmp=arr2[i]; ?? ? ? arr2[i]=arr2[sz-1]; ?? ? ? arr2[sz-1]=tmp; ?? ? ? sz--; ?? ??? ?} ?? ??? ?else ?? ??? ??? ?break; ?? ?} }
void reverse(char* arr) ? ? ? { ?//倒置 ?"student a am i" ?? ?reverse2(arr); ?? ?//单词的倒置 ?? ? ? ? //"i ma a tneduts" ?? ?int i=0,j=0; ?? ?char* begin=arr; ?? ?char* end=arr; ?? ?int sz=Calculate(arr); ?? ?char tmp=0; ?? ?for(i=0;i<=sz;i++) ?? ?{ ?? ??? ?if(i==0) ?? ??? ??? ?continue; ?? ??? ?else if(*(arr+i)==' '||(*(arr+i))=='\0'||i==sz) ?? ??? ?{ ?? ??? ??? ?end++; ?//使end与arr+1的地址相同 ?? ??? ??? ?char* tmp2=end; ? ?? ??? ??? ?end=end-1; ?//抓取' '的上一个字符 ?? ??? ? ? ?while(begin<end) ?? ??? ??? ?{ ? ? ? ? ? ? ? ? ? ? ? //进行单个单词的转换 ?? ??? ??? ? ? ?char tmp3=*begin; ?? ??? ??? ??? ?*begin=*end; ?? ??? ??? ??? ?*end=tmp3; ?? ??? ??? ??? ?begin++; ? ? ? ? ?? ?? ??? ??? ??? ?end--; ?? ??? ??? ?} ?? ??? ??? ?if(i==sz) ? ? ?? ?? ??? ??? ?{return ;} ?? ??? ??? ?else ?? ??? ??? ?{begin=tmp2+1; ?//首字符的位置要与end下一个字符的位置相同,以便单词转换 ?? ??? ??? ?end=tmp2;} ? ? ?//归还end? ?? ??? ?} ?? ??? ? if(*(arr+i)!=' ') ?? ??? ??? ?end++; ?? ?} ?? ? ?? ? }
int main() { ?? ?int i=0; ?? ?char arr[]="student a am I"; ?//14 ?? ?int sz=strlen(arr); ?? ?reverse(arr); ?//14 ?? ?printf("%s\n",arr); ?? ?system("pause");
?? ?return 0; } ?
|