問 :
輸入一個字母順序弄混的英文單字到一字元陣列內,請寫一個程式將此
輸入的錯誤英文單字由第一個字母起使用鄰近字母對調方式一步一步地
回復原有正確英文字順序,並將中間過程印出,例如: 輸入原為 apple
蘋果的錯誤單字 epalp ,則程式應印出:
epapl -> eappl -> aeppl -> apepl -> appel ->apple
答 :
另類作法 最好不要直接將以下程式當作業交
找書將以下的 find, copy, swap 等函式的意義搞清楚 再用簡單的語法替代
否則很容易被--抓包
複製內容到剪貼板
代碼:
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std ;
int main() {
const int S = 5 ;
char correct[S] = { 'a' , 'p' , 'p' , 'l' , 'e' } ;
char wrong[S] = { 'e' , 'p' , 'a' , 'p' , 'l' } ;
int i ;
char *j , *k ;
copy( wrong , wrong+S , ostream_iterator<char>(cout," ") ) ;
for ( i = 0 ; i < S ; ++i ) {
j = find( wrong+i , wrong+S , correct[i] ) ;
for ( k = j ; k > wrong+i ; --k ) {
swap( *k , *(k-1) ) ;
cout << " --> " ;
copy( wrong , wrong+S , ostream_iterator<char>(cout," ") ) ;
}
}
cout << endl ;
system("pause") ;
return 0 ;
}
[
本帖最後由 philxyz0316 於 2006-8-27 13:04 編輯 ]