2012-03-08 73 views
-2

這裏是下面的代碼工作得很好:如何重新排列字符串中的字符?

sCharacterUid = "394F73"; 
size_t pos; 
sPos1 = sCharacterUid.substr(4,1); 
sPos2 = sCharacterUid.substr(5,1); 
sPos3 = sCharacterUid.substr(2,1); 
sPos4 = sCharacterUid.substr(3,1); 
sPos5 = sCharacterUid.substr(0,1); 
sPos6 = sCharacterUid.substr(1,1); 
sCharacterUid = sPos1 + sPos2 + " " + sPos3 + sPos4 + " " + sPos5 + sPos6; 
String^ sfCharacterUid = gcnew String(sCharacterUid.c_str()); 

但我想知道我怎麼可以減少執行該任務所需的代碼量。

這是C++/CLI。

謝謝。

+0

這真的是C++? – karlphillip 2012-03-08 18:53:11

+0

@karlphillip:是和否:它是[C++/CLI](http://en.wikipedia.org/wiki/C%2B%2B/CLI)。 – ruakh 2012-03-08 18:54:41

+0

你爲什麼不嘗試其他2個類似的問題提供的建議 - [http://stackoverflow.com/questions/9612079/loop-to-keep-adding-spaces-in-string](http://stackoverflow。 COM /問題/ 9612079 /環路對保加 - 空間 - 在字符串)? – 2012-03-08 18:57:33

回答

2

乍一看,爲什麼不

sPos1 = sCharacterUid.substr(4,2); 
sPos3 = sCharacterUid.substr(2,2); 
sPos5 = sCharacterUid.substr(0,2); 
sCharacterUid = sPos1 + " " + sPos3 + " " + sPos5; 

或者

string result=""; 
for (i=4;i>=0;i-=2) 
    result += sCharacterUid.substr(i,2) + " "; 

或者,它可能是更有效的與原始字符工作。

char result=[9]; 
char* dest=result; 
char* source = sCharacterUid.c_str(); 
for (i=4;i>=0;i-=2) 
{ 
    *dest++ = source[i]; 
    *dest++ = source[i+1]; 
    *dest++ = ' '; 
} 
*(--dest)='\0'; 
String^ sfCharacterUid = gcnew String(result); 
+0

工作得很好,我從來沒有用過substr,所以這工作得很好!謝謝。將在5分鐘內回答... – Andrew 2012-03-08 18:53:42

1
std::string & S = sCharacterUid; 
S = S.substr (4, 2) + " " + S.substr (2, 2) + " " + S.substr (0, 2); 
+0

不起作用... – Andrew 2012-03-08 18:51:57

+0

@Andrew:說「某些東西不起作用」通常不會有用。它會給出一個編譯錯誤(在這種情況下,哪個?),或者它給出了一個運行時錯誤(在這種情況下,哪個?),或者它做了與你預期不同的事情(在這種情況下,它有什麼作用?) ,或者它什麼都不做(在這種情況下,這樣說)。 – ruakh 2012-03-08 18:53:53

+0

我認爲sCharacterUid是一個字符串? – idefixs 2012-03-08 18:55:36