广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3396 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
p432124 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x15
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 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
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x6
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

第一个问题:
#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 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x1 鲜花 x21
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

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

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.023376 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言