#include<stdio.h>
int my₋strlen(char *plen);
char reverse(char *pstr,char *pend) {
char tmp;
while(pstr<=pend) {
tmp=*pstr;
*pstr=*pend;
*pend=tmp;
pstr++;
pend--;
}
}
int my₋strlen(char *plen) {//模拟实现strlen
char *pstart=plen; //将数组首元素记下
while(*plen++); //指针++,直到读取\0停止,此时指针还会++一次
return plen-pstart-1; //最后地址-首地址=长度
}
int main(){
int i=0;
char str[100]= {0};
gets(str);
int len=my₋strlen(str);
reverse(str,str+len-1);//长度-1就是最后一个元素的数组下标
printf("reverse第一遍,将每个字母逆序\n%s\n",str);
//至此实现了字符串中挨个字符的逆序
//接着将每个单词正序,读入空格为一个单词
//如 I love china. →.anihc evol I→china. love I
char* start=str;
while(*start) {
char *end=start;
while(*end!='\0'&&*end!=' ')//找出一个单词的首末地址
{
end++;
} //将这个单词,不包括空格,逆序
reverse(start,end-1);
if(*end==' ')//当end指向空格时,再+1从下一个单词开始reverse
start=end+1;
else
start=end;
}
printf("reverse第二遍,将单词的字母正序回来\n%s",str);
}
01-11
605
08-27
3631
08-24
852