2012-03-08 75 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