2014-04-05 28 views
1

我有一個字符串名爲CC:如何實現在C中重新排列數組?

char cc[49] = { "rrrrrrrrbbbwwwgggyyybbwwggyybbbwwwgggyyyoooooooo" }; 

我試圖重新排列並結合成像這樣一個較長的字符串(我知道這不工作):

char Intermediary[120] = { 
    { ("nn%c%c%cn", (cc[29], cc[40], cc[46])) }, 
    { ("nnn%c%cn", (cc[39], cc[47])) }, 
    { ("nnn%c%c%c", (cc[38], cc[48], cc[37])) }, 
    { ("nn%c%cnn", (cc[21], cc[28])) }, 
    { ("nnn%cn%c", (cc[27], cc[26])) }, 
    { ("n%c%c%cnn", (cc[1], cc[9], cc[20])) }, 
    { ("n%cn%cnn", (cc[2], cc[19])) }, 
    { ("n%cn%cn%c", (cc[3], cc[18], cc[17])) }, 
    { ("nn%cn%cn", (cc[30], cc[44])) }, 
    { ("nnnn%c%c", (cc[45], cc[36])) }, 
    { ("n%c%cnnn", (cc[4], cc[10])) }, 
    { ("n%cnnn%c", (cc[5], cc[16])) }, 
    { ("%cn%cn%cn", (cc[32], cc[31], cc[41])) }, 
    { ("%cnnn%cn", (cc[33], cc[42])) }, 
    { ("%cnnn%c%c", (cc[34], cc[43], cc[35])) }, 
    { ("%cn%cnnn", (cc[23], cc[22])) }, 
    { ("%cnnnn%c", (cc[24], cc[25])) }, 
    { ("%c%c%cnnn", (cc[12], cc[6], cc[11])) }, 
    { ("%c%cnnnn", (cc[13], cc[7])) }, 
    { ("%c%cnnn%c", (cc[14], cc[8], cc[15])) }, 
}; 

printf("%s", Intermediary); 

這是生產下面的輸出:

ooybybyyogbgoogwgwrg 

與之相對應出來什麼:

nnbyonnnnyonnnnyognnbynnnnnyngnrbynnnrnynnnrnyngnnbnonnnnnognrbnnnnrnnngwnbnonwnnnonwnnnogwnbnnnwnnnngwrbnnnwrnnnnwrnnng 

我在做什麼錯?我看過StackOverflow上的各種論壇帖子,但似乎沒有人幫助我。我已經用Python重寫了代碼(它有效),但是Python到C的轉換器爲C noob(例如我自己)生成了無用的長代碼:(任何形式的幫助都將不勝感激,或者如果您感覺非常慷慨,後面的示例代碼/函數。預先感謝您:)。

編輯:

假設Deduplicator的推薦下,我的代碼現在看起來像這樣:

printf("nn%c%c%cn", cc[28], cc[39], cc[45]); 
printf("nnn%c%cn", cc[38], cc[46]); 
printf("nnn%c%c%c", cc[37], cc[47], cc[36]); 
printf("nn%c%cnn", cc[20], cc[27]); 
printf("nnn%cn%c", cc[26], cc[25]); 
printf("n%c%c%cnn", cc[0], cc[8], cc[19]); 
printf("n%cn%cnn", cc[1], cc[18]); 
printf("n%cn%cn%c", cc[2], cc[17], cc[16]); 
printf("nn%cn%cn", cc[29], cc[43]); 
printf("nnnn%c%c", cc[44], cc[35]); 
printf("n%c%cnnn", cc[3], cc[9]); 
printf("n%cnnn%c", cc[4], cc[15]); 
printf("%cn%cn%cn", cc[31], cc[30], cc[40]); 
printf("%cnnn%cn", cc[32], cc[41]); 
printf("%cnnn%c%c", cc[33], cc[42], cc[34]); 
printf("%cn%cnnn", cc[22], cc[21]); 
printf("%cnnnn%c", cc[23], cc[24]); 
printf("%c%c%cnnn", cc[11], cc[5], cc[10]); 
printf("%c%cnnnn", cc[12], cc[6]); 
printf("%c%cnnn%c", cc[13], cc[7], cc[14]); 
+1

C中沒有魔法插入。您必須調用這樣的函數,例如'printf'。 – Deduplicator

+0

@Deduplicator好吧,我現在已經實現了一大堆'printf'。我應該如何保存最終字符串?用'sprintf'替換'printf'? –

+0

不知道你現在的代碼是什麼樣的。在問題結尾添加分隔符後? – Deduplicator

回答

2

有沒有神奇的刀片在C.

相反,您必須手動創建的字符串,例如使用printf等功能。

sprintf適用於格式化爲緩衝區,fprintf用於打印文件,還有更多有用的變體。

+0

sprintf是否寫入緩衝區或連接它? –

+1

它總是覆蓋你指向的緩衝區的內容。雖然你可以給它一個指向緩衝區的指針,所以沒關係。此外,請確保緩衝區有足夠的空間,所以也許可以使用'snprintf'來代替... – Deduplicator