字符串循环右移
题目要求
- 编写一个函数,实现循环移动n位字符
- *LoopMove(char pStr, int steps)
题目分析
- 循环右移,需要确定字符串右边有多少位需要依次放到字符串的左边
- 也就是说将字符串分为两部分,通过计算得到两部分的长度
- 动态创建一个字符数组,存储需要移动到左边的字符,然后将原字符串剩下部分拷贝到后边即可
具体代码如下
void LoopMove(char *pStr, int steps)
{
int len = 0;
char *temp = pStr;
char *temp2 = pStr;
char *temp3 = pStr;
while(*temp++ != '\0')
{
len ++;
}
printf("Len:%d\n", len);
printf("temp2:%s\n", temp2);
char *temp_str = (char *)malloc((steps%len) * sizeof(char));
int j = 0;
for(int i = 0; i < len; i++)
{
temp2 ++;
if(i >= len - (steps % len) - 1)
{
strncpy(temp_str, temp2, (steps % len));
break;
}
}
char *result = (char *)malloc(len * sizeof(char));
strncpy(result, temp_str, (steps%len));
for(int i = 0; i < len - (steps % len); i++)
{
result[(steps%len) + i] = pStr[i];
}
printf("temp_str:%s\n", temp_str);
printf("result:%s\n", result);
}
整个Demo程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void LoopMove(char *pStr, int steps)
{
int len = 0;
char *temp = pStr;
char *temp2 = pStr;
char *temp3 = pStr;
while(*temp++ != '\0')
{
len ++;
}
printf("Len:%d\n", len);
printf("temp2:%s\n", temp2);
char *temp_str = (char *)malloc((steps%len) * sizeof(char));
int j = 0;
for(int i = 0; i < len; i++)
{
temp2 ++;
if(i >= len - (steps % len) - 1)
{
strncpy(temp_str, temp2, (steps % len));
break;
}
}
char *result = (char *)malloc(len * sizeof(char));
strncpy(result, temp_str, (steps%len));
for(int i = 0; i < len - (steps % len); i++)
{
result[(steps%len) + i] = pStr[i];
}
printf("temp_str:%s\n", temp_str);
printf("result:%s\n", result);
}
int main()
{
char *pStr = "abcdefghi";
LoopMove(pStr, 11);
}
Java 的解法
class Solution {
public String reverseLeftWords(String s, int n) {
String left = s.substring(0, n);
String right = s.substring(n);
return right + left;
}
}