我有一个排序功能,应该把所有的用户名来自3个字符以上开始到阵列的顶部,所有在3这个排序功能有什么问题?
if(wcslen((WCHAR*)playerNames[i]) < 3)
(这都将是“ - ”)中的那些以底部并换成<Unknown>
。我已经尝试了以下内容,但是当用"<Unknown>"
替换"-"
并崩溃时,我设置了奇怪的调试器值。
char* playerNames[30] = { "Player1", "Player2", "Player3", "Player4", "Player5", "Player6", "-", "Player7", "-", "-", "-", "-", "Player8", "Player9", "Player10", "Player11", "Player12", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "Player14", "Player15" };
void sort(){
char* sorted[29];
int slot = 0;
for (int i = 0; i < 30; i++){
if (playerNames[i] != "-"){
if (i == slot){
sorted[slot] = playerNames[i];
}
else {
sorted[i] = playerNames[i];
}
slot++;
}
else if (playerNames[i] == "-"){
slot++;
}
}
for (int i = 0; i < 30; i++){
if (wcslen((WCHAR*)sorted[i]) < 3){
sorted[i] = "<Unknown>";
}
playerNames[i] = sorted[i];
}
}
这应返回
Player1
Player2
Player3
Player4
Player5
Player6
Player7
Player8
Player9
Player10
Player11
Player12
Player13
Player14
Player15
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
<Unknown>
编辑:试过以下,但我仍然没有得到它的工作:
void sort(){
char* sorted[30];
int slot = 0;
for (int i = 0; i < 30; i++){
if (strcmp(playerNames[i], "-") != 0){
if (i == slot){
sorted[slot] = playerNames[i];
}
else {
sorted[i] = playerNames[i];
}
slot++;
}
else if (playerNames[i] == "-"){
slot++;
}
}
for (int i = 0; i < 30; i++){
if (strlen(sorted[i]) < 3){
sorted[i] = "<Unknown>";
}
playerNames[i] = sorted[i];
}
}
不要投射字符串。 – chris
'if(playerNames [i]!=“ - ”){'will * always * success。 C风格的字符串没有这种方式进行比较;你正在比较两个不同的指针是否相等。你想要的是'strcmp()'或WCHAR变体。 –
另外:'i <30'意味着你最终将访问不存在的'i [29]'(29个元素的数组将具有元素0到28)。 –