左旋字符串以及判断一个字符串是否另一个字符串左旋后的字符串
2018-02-28 17:49
344 查看
左旋字符串是一道面试常考的题,听着好像很难的样子,实际上它并没有想象中的那么难,接下来,我就用两种方式来实现左旋字符串。
方法一
循环左移法(思路)
假如说要左旋两位,那么就把字符串中的前两位保存在另一个字符串str里面,然后将剩下的sub中的字符串整体向前移动。最后将sub中的字符串和str中的字符串进行合并就可以得到想要的左旋过后的字符串了。
具体代码如下
*方法二
双倍字符串法
双倍字符串法的算法思想不好想但是很好实现,因为它的实现调用了字符串拷贝的库函数。具体方法是将要进行左旋的字符串str拷到另一个字符串sub中,然后再把两个字符串连接,得到双倍字符串。加入要左旋两位,就在sub字符串中从第三个字符开始拷贝,拷贝length长度个,拷到str字符串,这样str字符串里面就是左旋过后的了
代码如下
方法一
循环左移法(思路)
假如说要左旋两位,那么就把字符串中的前两位保存在另一个字符串str里面,然后将剩下的sub中的字符串整体向前移动。最后将sub中的字符串和str中的字符串进行合并就可以得到想要的左旋过后的字符串了。
具体代码如下
#include<stdio.h> #include<stdlib.h> #include<string.h> void StringRverse(char *pStr,int steps) { int length=0,i=0; char *sub=pStr,*str; while(*pStr !='\0') { length++; pStr++; } pStr--; if(steps > length) steps=steps-length; str=(char *)malloc(steps); for(i=0;i<steps;i++) str[i]=sub[i]; for(i=0;i<length-steps;i++) sub[i]=sub[length-steps+i-2]; for(i=0;i<steps;i++) sub[length-steps+i]=str[i]; } int main() { char a[]="abcdef"; printf("最初的字符串为: \n%s\n",a); StringRverse(a,2); printf("左旋两位后为: \n%s\n",a); system("pause"); return 0;
*方法二
双倍字符串法
双倍字符串法的算法思想不好想但是很好实现,因为它的实现调用了字符串拷贝的库函数。具体方法是将要进行左旋的字符串str拷到另一个字符串sub中,然后再把两个字符串连接,得到双倍字符串。加入要左旋两位,就在sub字符串中从第三个字符开始拷贝,拷贝length长度个,拷到str字符串,这样str字符串里面就是左旋过后的了
代码如下
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void StringRverse(char *pStr,int steps) { int length=0; char *sub=pStr; while( *sub !='\0') { length++; sub++; } char *tmp=(char *)malloc (sizeof(char)*length*2); assert(tmp); strcpy(tmp,pStr); strcat(tmp,pStr); strncpy(pStr,tmp+steps,length); } int main() { char a[]="abcdef"; printf("最初的字符串为: \n%s\n",a); StringRverse(a,2); printf("左旋两位后为: \n%s\n",a); system("pause"); return 0; }
相关文章推荐
- 判断一个字符串是否是另一个字符串的左旋,如果是输出左旋的次数
- 判断某一个字符串是否存在另一个字符串中
- 判断一个字符串是否由另一个字符串旋转而成
- java cloneable以及如何判断一个字符串是否为数字。
- PHP判断一个字符串是否在另一个字符串中
- 判断一个字符串里是否包含另一个字符串所有的字符
- Java中判断一个字符串是否包含另一个字符串的方法
- 判断一个字符串是否是另一个字符串翻转后的结果
- JAVA中判断一个字符串是否包含另一个字符串
- JavaScript 判断一个字符串是否在另一个字符串中
- php之substr_count判断一个字符串是否包含另一个字符串
- 判断一个字符串是否为另外一个字符串左旋或右旋之后的字符串。
- 判断一个字符串是否是另一个字符串的子集
- 将一个字符串放在另一个字符串最前面or最后面,判断是否是能回文字符串
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- php如何判断一个字符串是否包含另一个字符串
- 程序员面试金典: 9.1数组与字符串 3判断一个字符串字符重新排列后是否可变成另一个字符串
- 判断一个字符是否是另一个字符的旋转字符串
- 判断一个字符串是否在另一个字符串中:O(m+n)
- 判断一个字符串是否为另一个字符串的旋转后的子字符串