#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"); }
两种方法,第一种借助字符串翻转,第二种采用冒泡法。