#include "stdafx.h"
#include <iostream>
using namespace std;
void reverse_str(char data[100],int i,int j)
{
int high = j;
int low = i;
char temp;
while (low < high)
{
temp = data[low];
data[low] = data[high];
data[high] = temp;
low++;
high--;
}
}
void left_move1(char data[100],int m) //abcdefg cdefgab 1.ba gfedc
{
int n = strlen(data);
reverse_str(data, 0, m - 1);
reverse_str(data, m, n - 1);
reverse_str(data, 0, n - 1);
}
void left_move2(char data[100], int m) //借助冒泡法
{
int n = strlen(data)-1;
int i,j;
for (i = 0; i < m; i++)
{
for (j = 1; j <= n; j++)
{
char temp = data[j-1];
data[j-1] = data[j];
data[j] = temp;
}
}
}
int main()
{
char data[100];
int m;
cin >> data;
cout << "向左移动几位:";
cin >> m;
int m2 = m;
char data2[100] = { NULL }; //如果没有初始化,这个数组data2复制data有问题,不知道为啥
int i = 0;
for(i=0;i<strlen(data);i++)
{
data2[i] = data[i];
}
left_move1(data, m);
left_move2(data2, m2);
cout << data<<endl;
cout << data2;
system("pause");
}
两种方法,第一种借助字符串翻转,第二种采用冒泡法。