| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 748 人关注过本帖
标题:进来看一下是什么问题
只看楼主 加入收藏
hmsss
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-3-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
进来看一下是什么问题
程序代码:
#include<iostream>
using namespace std;
char *fun(char *ss)
{
    char len=strlen(ss);
    int i;
    char t;
    for(i=0;i<len/2;i++)
    {
        t=ss[i];
        ss[i]=ss[len-1-i];
        ss[len-1-i]=t;
    }
    return ss;
}
int main()
{
    char *b=new char[10];
    cout<<"please enter number"<<endl;
    for(int i=0;i<10;i++)
    {
        cin>>b[i];
    }
    cout<<fun(b)<<endl;
    return 0;
}
字符串逆置 输出的时候前面部分为乱码,搞了很久也不清楚出在什么地方
2011-07-28 00:09
lzt9929
Rank: 3Rank: 3
来 自:临沂
等 级:论坛游侠
帖 子:59
专家分:136
注 册:2011-7-23
收藏
得分:0 
确定第三行fun前面那个*存在?
2011-07-28 07:11
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
收藏
得分:0 
原因很简单,因为 char *b=new char[10];  这里,你强行定义b的长度是10,那么你的strlen就是010的长度。
当你在cin输入时,如果输入的不是10个字符(比如abcdefg),那么后面的三个地址将是空的。所以逆序过来后你的前面会有乱码。
不知道这样讲清晰不清晰。

第二,你用了new之后请一定记得用delete释放!!!
2011-07-28 09:33
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:20 
字符串逆置为什么要这么麻烦还特意外面去弄个乱七八糟的函数?
#include <iostream>
#include <string>
using namespace std;

void main()
{
  string a;
  int b;
  cout<<"please enter number"<<endl;
  getline(cin,a);
  b=a.length();
  for(int i=0;i<b;i++)
      cout<<a[b-1-i];
}
这样很简单不就好了吗?


都不结贴我郁闷那!
2011-07-28 22:16
hmsss
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-3-1
收藏
得分:0 
回复 2楼 lzt9929
这个真的是存在的。
2011-07-28 23:18
hmsss
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-3-1
收藏
得分:0 
回复 3楼 我是菜鸟C
不管是固定还随机的,我输入全部的字符都一样,输出前面部分为乱码。比如输入这样一个字符串,不包括括号( q w e r t y u i o p )输出为( 6qds g礔  poiuytrewq ) 请高人指点啊。
2011-07-28 23:25
hmsss
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-3-1
收藏
得分:0 
回复 4楼 xg5699
想练习一下函数
2011-07-28 23:26
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:0 
其实是for循环问题,没有for循环cin后strlen()返回的字符串数值是对的,否则用永远是17;
还有你的len最好定义为int

都不结贴我郁闷那!
2011-07-28 23:49
xg5699
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:140
专家分:522
注 册:2011-7-27
收藏
得分:0 
回复 7楼 hmsss
#include<iostream>
using namespace std;
char *fun(char *ss)
{
    char len=strlen(ss);
    int i;
    char t;
    for(i=0;i<len/2;i++)
    {
        t=ss[i];
        ss[i]=ss[len-1-i];
        ss[len-1-i]=t;
    }
    return ss;
}
int main()
{
    char *b=new char[10];
    b[10]='\0';
    cout<<"please enter number"<<endl;
    for(int i=0;i<10;i++)
    {
        cin>>b[i];
    }
    cout<<fun(b)<<endl;
    return 0;
}

我知道了,是b这个字符串没有加结束标志,加了以后就不会出现问题了,string就是自动的,给你好的string类不用 char用起来非常不方便
 b[10]='\0';
加了这个程序就不出错了



[ 本帖最后由 xg5699 于 2011-7-29 00:03 编辑 ]

都不结贴我郁闷那!
2011-07-29 00:02
hmsss
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-3-1
收藏
得分:0 
回复 8楼 xg5699
能否解释一下for之后总是是17?刚刚我调试了一下知道问题出在for循环那里,但就想不明白为什么?
2011-07-29 00:02
快速回复:进来看一下是什么问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041238 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved