p432124
|
分享:
▼
x0
|
[C/C++][求助] 有關C++的題目 哪裡程式有誤呢?【已解決】
剛才我打了一些的程式... 不知道哪裡有誤! 麻煩大家可不可以幫我看看哪裡程式有誤呢? 1.設計一個函式 void ClearStr(char **Str),將傳入的字串 *Str(使用指標傳送引數)內容清空。 void ClearStr (char **Str) 引數:*str為一個字串, **Str為一個指向字串的指標。 功能:將*Str內容設為空字串。 #include <iostream> using namespace std; int main(void) { char *strl="Hello World!"; cout << " .. 訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容
[ 此文章被p432124在2009-01-02 02:36重新編輯 ]
|
|
x0
[樓 主]
From:臺灣中華電信HINET | Posted:2008-12-29 22:06 |
|
|
accc0000
|
分享:
▲
▼
第一個問題: #include <iostream> using namespace std; int main(void) { char *strl="Hello World!"; 上面一行,編譯器會做如下動作: 1. 設定 Hello World! 為一常數字串 2. 為該字串保留夠用的記憶體並儲存,本例來說"Hello World!"+'\0' = 13 3. 把記憶體起始位置存入變數,即strl 基於常數不能被改變的特性,當然也不能清空 若改成 char strl[]="Hello World!"; 則可以 因為此時 strl 是一個字元陣列,長度13 **********************************
cout << "原始的字串為:" << strl << endl; ClearStr(&strl); 上面一行,看得出來你要傳入一個位址 陣列名稱或去掉*字號的指標名稱,本身就是個位址 因此應改成ClearStr(strl); **********************************
cout << "清除後字串為:" << strl << endl; return 0; } 綜觀您的目的,可以改成如下: #include <iostream> using namespace std; void ClearStr(char *str) { for(int i=0;i < strlen(str) ; i++) *(str+i) = '\0'; /*論壇會把字吃掉,上一行的兩個單引號之間是一個反斜線跟一個數字0*/ } int main(void) { char strl[]="Hello World!"; cout << "原始的字串為:" << strl << endl; ClearStr(strl); cout << "清除後字串為:" << strl << endl; return 0; } 不過意義不大 設成空字串只需用strl[0] = '\0' 或 *strl = '\0'即可 /*字被吃掉,同上*/
第二個問題: 不太懂您的意思 如果只是要把相對位置相加,可如下 #include <iostream> using namespace std; int main(void) { int A[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int B[3][4]={{2,4,6,8}, {10,12,14,16}, {18,20,22,24}}; int C[3][4]={0}; int i,j;
/********************加入程式碼,完成C=A+B**********************/ for (i=0;i<3;i++) for (j=0;j<4;j++) C[j] = A[j]+B[j]; /*論壇會把字吃掉,上一行為'C'+'['+'i'+']'+'['+'j'+']'+ '='+'A'+'['+'i'+']'+'['+'j'+']'+'B'+'['+'i'+']'+'['+'j'+']'+';'*/ /************************************************************/ for(i=0;i<3;i++) { for(j=0;j<4;j++) { // cout << "C[" << i+1 << "," << j+1 << "]=" << C[j] << "\t"; cout << "C[" << i << "][" << j << "]=" << C[j] << "\t";//字被吃掉'C'+'['+'i'+']'+'['+'j'+']' } cout << "\n"; } system("PAUSE"); return 0; }
有反斜線的地方好像都會被吃掉,有人可以教我如何避免嗎?
此文章被評分,最近評分記錄財富:50 (by 三仙) | 理由: 因為您的參與,讓程式設計更容易!! | |
|
|
|
|
x0
[1 樓]
From:臺灣數位聯合 | Posted:2008-12-30 20:15 |
|
|
teldeanmac85
|
分享:
▲
第2題直接在迴圈裡面做就OK了~加2行上去 複製程式
int main(int argc, char* argv[])
{
int A[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int B[3][4]={{2,4,6,8},{10,12,14,16},{18,20,22,24}};
int C[3][4]={0};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
C[i][j] = A[i][j] + B[i][j];
cout << "C[" << i+1 << "," << j+1 << "]=" << C[i][j] << "\t";
}
cout << "\n";
}
return 0;
}
此文章被評分,最近評分記錄財富:50 (by 三仙) | 理由: 因為您的參與,讓程式設計更容易!! | |
|
|
|
|
x0
[2 樓]
From:臺灣新世紀 | Posted:2008-12-31 09:18 |
|
|
|