字符串翻转函数strrev(s);(略)
#include
char s[]=“1234567890”;
strrev(s);
一、字符串初级反转(运用数组)
0、最容易理解的解决法:
#include
#include
int main()
{
char str[100]="1234567890";
int i,len=strlen(str);
for(i=len-1;i>=0;i--)
printf("%c",str[i]);
return 0;
}
1、已知字符串长度或运用string.h中函数测量字符串,从s[0]到s[n/2]逐个地将s[i]与s[len-1-i]进行交换。
#include
#include
void reverse(char s[]) //未提前知道字符串长度型
{
int i,len;
char tmp;
len=strlen(s);
for(i=0;i<(len/2);i++)
{
tmp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=tmp;
}
}
int main()
{
char str[30]="1234567890";
reverse(str);
puts(str);
return 0;
}
若提前已经知道字符串长度 改用函数
#include
void reverse(char s[],int n)
{
int i;
char temp;
for(i=0;i<(n/2);i++)
{
temp=s[i];
s[i]=s[n-1-i];
s[n-1-i]=temp;
}
}
int main()
{
char str[30]="1234567890";
reverse(str,10);
puts(str);
return 0;
}
2、利用两个变量i,j从两侧进行调换
#include
#include
void reverse(char s[],int n)
{
int i,j;
char t;
for(i=0,j=n-1;i<j;i++,j--)
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
int main()
{
char str[]="1234567890";
reverse(str,strlen(str));
puts(str);
return 0;
}
利用while循环
int i,j;
char t;
while(i++<j--)
{t=s[i];
s[i]=s[j];
s[j]=t;
}
二、运用指针对字符串数组进行访问
1、不用已有函数,手动编写测量字符串长度的函数并反转
#include
void reverse(char *p)
{
char *tmp=p;
int a=0;
while(*tmp!=0)
{
tmp++;
a++;
}
int j=0;
char ch=NULL;
for(j=0;j<a/2;j++)
{
ch=*(p+j);
*(p+j)=*(p+a-1-j);
*(p+a-1-j)=ch;
}
}
int main()
{
char data[30]="xingzizuihaole";
reverse(data);
printf("%s",data);
return 0;
}
2、调用strlen()函数并利用数组指针反转
#include
#include
void reverse(char *p)
{
char ch=NULL;
int i;
int len=strlen(p);
for(i=0;i<len/2;i++)
{
ch=*(p+i);
*(p+i)=*(p+len-1-i);
*(p+len-1-i)=ch;
}
}
int main()
{
char s[20]="1234567890";
reverse(s);
puts(s);
return 0;
}
3、将变量名细节化(更简单的方法待求解)
#include
#include
void reverse(char *p,int left,int right)
{
char tmp;
while(left<right)
{tmp=*(p+left);
*(p+left)=*(p+right);
*(p+right)=tmp;
left++;
right--;
}
}
int main()
{
char arr[]="student a am i";
int left=0;
int len=strlen(arr)-1;
int right=0;
char *tmp=arr;
reverse(arr,left,len);
while(*tmp!='\0')
{
left=right;
while(*tmp!=' '&&*tmp!='\0'){
right++;
tmp++;
}
reverse(arr,left,right-1);
if(*tmp!='\0')
tmp++;
right++;
left++;
}
puts(arr);
return 0;
}