2014-10-01 56 views
0

我想編碼一個需要5個字符長的字符串的C++程序,然後用這個順序打印出一個新的排列的字符串:第一個字符,第三個字符,第五個字符,第二個字符,第四個字符。我的代碼如下:在一個特定的排列中連接字符串的字符

#include <iostream> 
#include <string> 
#include <algorithm> 
using namespace std; 

int main() 

{ 
string key; 
string p10; 
cout << "Enter the five characters long string: "; 
    cin >> key; 
p10 = key[0] + key[2] + key[4] + key[1] + key[3]; 
cout << p10 << endl;’ 



system(「pause」); 
return 0; 

} 

輸出(p10)是一個隨機的希臘字母,每次我運行它。

請幫忙!

+0

是不是'字符串鍵'應該是'char []鍵;'? – Cullub 2014-10-01 03:05:51

回答

2

這裏的問題是,當你在一個字符串上使用[]時,你沒有找回另一個字符串,而是一個char。 A char實際上只是一個小整數(認爲是字符代碼),如果您使用+運算符,它會將這些數字相加。你最終會得到一個或多或少隨機的字符代碼,這就是爲什麼你會得到希臘字母。

如果你想保持儘可能接近原儘可能代碼的結構,可以使用substr得到「一個字符串」,而不是簡單的char S:

key.substr(0, 1) + key.substr(2, 1) + ... 

1意味着你想從指定的偏移量中獲得一個字符。

另一種方式是先構造一個字符數組列的字符,然後把它變成一個字符串:

char p10_arr[] = { key[0], key[2], ... }; 
string p10(arr, sizeof(arr)); 

,也許是最好的,最簡潔的方法是使用初始化列表語法:

string p10 { key[0], key[2], ... }; 
+0

太棒了。非常感謝!那樣做了。我從來沒有嘗試過C++的字符串操作。感謝您的解釋,更有意義! – bblo 2014-10-01 03:14:05

+0

最後一種方法,最好最簡潔的方法是在開啓的大括號中顯示一個語法錯誤,並說它需要分號? – bblo 2014-10-01 03:35:50

+0

@bblo:這可能是由於過時的或錯誤配置的C++編譯器,初始化程序列表語法是在C++ 11中添加的。您可能需要分別告訴編譯器啓用C++ 11功能或者升級它或兩者。 – 2014-10-01 03:36:58

相關問題