1.学会翻转字符串("tneduds a ma i"---->"i an a student")
//普通实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *reverse(char *start,char *end)//翻转字符串
{
char *ret=start;
assert(start);
assert(end);
while(start<end)
{
char tmp=*start;
*start=*end;
*end=tmp;
start++;
end--;
}
return ret;
}
int main()
{
char arr[]="tneduts a ma i";
int sz=sizeof(arr)/sizeof(arr[0])-1;//减去‘\0’
char *ret=reverse(arr,arr+sz-1);
printf("%s\n",ret);
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//递归实现
int my_strlen(const char *str)
{
if(!*str)
return 0;
else
return 1+my_strlen(str+1);
}
//递归实现
void reverse(char *str)
{
int len = my_strlen(str);
assert(str);
if(len>1)
{
char tmp = *str;
*str=*(str+len-1);
*(str+len-1)='\0';
reverse(str+1);
*(str+len-1)=tmp;
}
}
int main()
{
char arr[]="abcdefgh";
reverse(arr);
printf("%s\n",arr);
system("pause");
return 0;
}
2.将字符串中的每个单词翻转("i ma a tneduts"---->"i am a student")
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *reverse(char *start,char *end)
{
char *ret=start;
while(start<end)
{
char tmp=*start;
*start=*end;
*end=tmp;
start++;
end--;
}
return ret;
}
char *reverse_string(char *str,int sz)//将字符串中的每个单词翻转
{
char *start=str;
char *end=str;
char *ret=str;
assert(str);
while(*str++)
{
if(*str == ' '|| *str == '\0')
{
end=str-1;
reverse(start,end);
start=str+1;
end=start;
}
}
return ret;
}
int main()
{
char arr[]="i ma a tneduts";
int sz=sizeof(arr)/sizeof(arr[0])-1;//减去‘\0’
char *ret=reverse_string(arr,sz);
printf("%s\n",ret);
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *reverse(char *start,char *end)
{
char *ret=start;
while(start<end)
{
char tmp=*start;
*start=*end;
*end=tmp;
start++;
end--;
}
return ret;
}
char *reverse_string(char *str,int sz)
{
char *start=str;
char *end=str;
char *ret=str;
assert(str);
reverse(str,str+sz-1);//先将整个字符串逆序为“i ma a tneduts”
while(*str++)
{
if(*str == ' '|| *str == '\0')
{
end=str-1;
reverse(start,end);
start=str+1;
end=start;
}
}
return ret;
}
int main()
{
char arr[]="student a am i";
int sz=sizeof(arr)/sizeof(arr[0])-1;//减去‘\0’
char *ret=reverse_string(arr,sz);
printf("%s\n",ret);
system("pause");
return 0;
}