要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=0;
char arr[]="student a am i";
int sz=sizeof(arr)/sizeof(arr[0]);
for(; i<sz; i++)
{
char *pa=NULL;
char *pb=NULL;
int left=0;
int right=sz;
pa=&arr[left];
pb=&arr[right];
while(left<=right)
{
left++;
right--;
if(*pa==' ')
{
right-=1;
}
if(*pb=' ')
{
left+=1;
}
if(*pa==*pb==' ')
{
char tmp;
tmp=*pa;
*pa=*pb;
*pb=tmp;
}
}
printf("%c",arr[i]);
}
system("pause");
return 0;
}
结果是这样的:
然而,字符串没发生改变,而是原样输出了。我本来想着左右各一个指针,遇到空格就说明是一个单词,
然后进行逆序,最后再将整个字符串逆序,结果发现单词的长度不同,指针不能同时控制(意思就是两边遇到空格不同时),
貌似我完全驾驭不了,所以便放弃了,也有可能是我现在能力太弱吧!
老师讲了之后,我又试着去敲此代码,结果令我好意外!
#include<stdio.h>
#include<stdlib.h>
void reverse(char *left,char *right)//逆置函数
{
while(left<right)
{
int tmp;
tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
void reverse_arr(char arr[],int sz)//检查字符串内部的逆序函数
{
char *left=arr;
char *right=arr+sz-1;
char *start=arr;
char *end=arr;
reverse(left,right);
while(*end!='\0')
{
while((*end!='\0') && (*end!=' ')) //错误1:while((*end!='\0') && (*end==' '))
{
end++;
}
reverse(start,end-1);//错误2:把调用语句放到了if语句之后
if(*end!='\0')
{
start=end+1;
end=start;
}
}
}
int main()
{
char arr[]="stdudent a am i";
int sz=sizeof(arr)/sizeof(arr[0])-1;
reverse_arr(arr,sz);
printf("%s\n",arr);
system("pause");
return 0;
}
结果只有整个字符串逆序了,根本没达到预期结果。除以上两种错误后,还有一些小问题,
我才深深体会到人万万不可眼高手低,否则欺骗的只能是自己!!!
以后一定要把学过的知识吃透,吃杂实,勤于练习,善于发现和学习新知识。