我在 C 中有一個字串陣列:
char taula[15][15];
這張表充滿了一個檔案的句子。一個單詞最多可以有 15 個字母。一個短語最多可以有 15 個單詞。這是它的內容:
{ "may", "the", "force", "be", "with", "you." }
現在,我需要更改單詞的順序,使它們不按此順序排列(但這對問題無關緊要)。
我是 C 的新手,但我的大腦是這樣的(這就是我在 Java 中會做的事情):
char aux[15] = "";
char frase_nova[15][15];
for(i=0;i<15;i=i 2) {
aux = taula[i];
taula[i] = taula[i 1];
i ;
}
我創建了一個 aux 變數來存盤一個單詞,并創建一個新陣列來存盤無序的短語。我將第一個元素存盤到 aux 變數中。將第 0 個元素分配給第一個,最后我將 aux 分配給第 0 個元素,依此類推。這樣我應該得到這個短語作為結果:
the may be force you. with
這導致了我的錯誤,所以我搜索了原因,并使用 strcpy 將該代碼更改為該代碼:
strcpy(aux,frase_nova[i 1]);
strcpy(frase_nova[i 1],frase_nova[i]);
strcpy(frase_nova[i],aux);
printf("%s",frase_nova[i]);
但這給我帶來了一個奇怪的結果。我不明白的事情發生在指標和陣列或其他任何東西上。
the E?Ube you.??aE?URE?U
所以我想知道如何按照我想要的順序 ([i]) 用原始多維 char 陣列的值填充新的多維 char 陣列。
uj5u.com熱心網友回復:
一個單詞最多可以有 15 個字母。
那么你應該有單詞的大小,在二維char陣列中,作為16而不是15
char taula[15][16];
^^
因為,在 C 中,字串實際上是由空字符終止的一維字符陣列'\0'。因此,您需要空間來容納空字符'\0'。
你的陣列有6字串,即3對,所以你只需要迭代回圈3幾次。但是,看看這個for回圈:
for(i=0;i<15;i=i 2) {
它將迭代3多次。愿您可以跟蹤2D陣列中的元素數量并使用它而不是15在回圈條件中。
如您所知,for回圈體的這些陳述句將不起作用:
aux = taula[i];
taula[i] = taula[i 1];
因為aux和taula都是陣列。但是你的回圈體中還有一個問題,那就是這個陳述句:
i ;
您已經i在回圈中遞增-i=i 2如果您i 在回圈體中執行,那么在每次迭代中,i都會遞增3并且不會給出所需的結果。你不需要i 在回圈體中做。
這些陳述沒有問題:
strcpy(aux,frase_nova[i 1]);
strcpy(frase_nova[i 1],frase_nova[i]);
strcpy(frase_nova[i],aux);
printf("%s",frase_nova[i]);
假如
- 如果陣列
frase_nova有元素{ "may", "the", "force", "be", "with", "you." },并且。 - 回圈變數
i在每次迭代中僅增加兩次。
檢查以下代碼:
#include <stdio.h>
#include <string.h>
#define WORDS 15
#define WORD_SZ 16
#define NUM_ELE 6
int main(void) {
char frase_nova[WORDS][WORD_SZ] = { "may", "the", "force", "be", "with", "you." };
char aux[WORD_SZ] = "";
for(int i = 0; i < NUM_ELE; i = i 2) {
// using your posted statements as it is
strcpy(aux, frase_nova[i 1]);
strcpy(frase_nova[i 1], frase_nova[i]);
strcpy(frase_nova[i], aux);
printf("%s ", frase_nova[i]);
}
printf ("\n");
for (int i = 0; i < NUM_ELE; i) {
printf ("%s ", frase_nova[i]);
}
printf ("\n");
return 0;
}
輸出:
# ./a.out
the be you.
the may be force you. with
所以我想知道如何用原始多維字符陣列的值填充新的多維字符陣列
不清楚是在交換原始陣列的字串之前還是交換字串之后char,用原始多維char陣列的值填充新的多維陣列。但是,無論您想要什么,都可以通過執行此操作來輕松實作 - strcpy(frase_nova[i], taula[i])。
uj5u.com熱心網友回復:
要交換 6 個單詞,您需要迭代 6 次,而不是 15 次。除非你只是想根據某種奇怪的模式來打亂單詞。
回圈也沒有任何意義。我不明白你為什么這樣做i=i 2。此外,任何性質的回圈for(int i=0; i<n; i )都不能訪問array[i 1]回圈體中的專案,因為這會導致越界訪問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404661.html
標籤:
