移动字符串中内容

228 阅读1分钟

1 题目

函数:fun()

功能:移动字符串中内容

描述:移动规则如下:把第1到第m个字符,平移到字符串的最后,把m+1到最后的字符移到字符串的前部

举例:字符串原有内容为ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC

2 思路

为了不产生额外的空间复杂度,本次解决将一位一位移动

将数组第一个位置的元素保存到一个临时变量temp中,从第二位开始集体向左移动,最后将temp元素保存到最后一位

循环 m 次,从而达到最后的效果

3 代码

#include <stdio.h> 
#include <string.h>
#define N 10

/**
函数:fun()
功能:移动字符串中内容
描述:移动规则如下:把第1到第m个字符,平移到字符串的最后,把m+1到最后的字符移到字符串的前部。
举例:字符串原有内容为ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC
**/


void fun(char *s, int m) {
	int temp;
	for (int i = 0; i < m; ++i) {
		temp = s[0];
		for (int j = 1; j < N; ++j) {
			s[j-1] = s[j];
		}
		s[N-1] = temp;
	}
}


int main(int argc, char const *argv[]) {
	char s[N] = "ABCDEFGHIJ";
	int m = 3;
	printf("移动前的字符串:%s\n", s);
	fun(s, m);
	printf("移动后的字符串:%s\n", s);
}

示例结果:

$ gcc ex006.c -o demo
$ ./demo
移动前的字符串:ABCDEFGHIJ
移动后的字符串:DEFGHIJABC