把“abcdef”反转为“defabc”
1.首先,定义一个字符串的指针,字符串的长度,然后进行移位;
2.再 写一个区调用上面的移位函数,然后进行反转
代码:
#include<stdio.h>
void LeftShiftone(char *s,int n)
{
char t = s[0];
for(int i=1;i<n;i++)
s[i-1] = s[i];
s[n-1] = t;
}
void leftRotate(char *s,int n,int m)
{
while(m--)
{
LeftShiftone(s,n);
}
}
int main()
{
char str[]="abcdef";
int n = sizeof(str)-1;
printf("%d\n",sizeof(str));
//printf("%d\n",n);
leftRotate(str,n,3);
printf("%s\n",str);
return 0;
}
时间复杂度为:O(nm);
我们常常会见到这样的题目:
写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。
#include <stdio.h>
#include<string.h>
void ReverseString(char *s,int from,int to)
{
char t;
while(from<to)
{
t=s[from];
s[from++]=s[to];
s[to--]=t;
}
}
int main()
{
char str[100];
int l,i,from,to;
printf("Enter a String: ");
gets(str);
l=strlen(str);
ReverseString(str,0,l-1);
printf("\n总体翻转:%s\n",str);
i=0;
while(str[i])
{
if(str[i]!=' ')
{
from=i;
while(str[i]&&str[i]!=' ')
{
i++;
}
i=i-1;
to=i;
}
char t;
while(from<to)
{
t=str[from];
str[from++]=str[to];
str[to--]=t;
}
i++;
}
printf("\nString:%s\n",str);
return 0;
}