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 |
|
|
|