| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:字符串复制错误,帮忙看下
只看楼主 加入收藏
养下就很帅
Rank: 2
等 级:论坛游民
帖 子:32
专家分:50
注 册:2007-8-3
结帖率:100%
收藏
 问题点数:0 回复次数:4 
字符串复制错误,帮忙看下
题是这样的~输入一串长整数 例如12345678 为了表示清楚记为:12,345,687 如123则输出123

#include <iostream>
using namespace std;
int count=0;
int num_len(int num)
{
    int len=0;
    while (num!=0)
    {
        num/=10;
        ++len;
        if (len%3==0)
        {
            ++count;
        }
    }
    return len; //输入数字的位数
}
void main()
{
    int num,len,flag;
    cin>>num;
    len=num_len(num);
    if (len>3)
    {
        
        int size_char=len+count,sign=0,flag;
        bool first=true;
        flag=len%3; //标记第一次出现,的位置
        char *a=new char[len+1];
        char *b=new char[size_char+1];   
        itoa(num,a,10);
        a[len]=0;
        b[size_char]=0;
        int i=0,j=0;
        while (a[i]!=EOF)
        {            
            sign%=3;
            if (j==flag&&first)
            {
                b[j]=',';
                first=false;
                sign=0;
                continue;
            }
            if (sign==0)
            {
                b[j]=',';               
            }
            else
            {
                b[j]=a[i];               
                ++i;               
            }            
            ++j;
            ++sign;
        }            
        cout<<b<<endl;
    }
    else
    {
        cout<<num<<endl;
    }   
}

试了好长时间都没发现是哪里写错了~出现内存错误 细心的朋友帮我看看 谢谢~
搜索更多相关主题的帖子: 字符 
2009-12-26 21:22
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
大致看了下··不知道LZ的思路。。不过看到一处错误的地方。。
a[i]!=EOF
EOF的值是-1;
查一下stdio.h中可以发现有:#define EOF     (-1)
LZ想表达的是a[i]!='\0'吧。。
不过这里改过来还是不行··答案不对~~~
2009-12-26 23:27
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
如果不涉及大数的话。。可以考虑用递归来简化下运算。。
程序代码:
#include <iostream>
using namespace std;
void num_len(int num, int flag)
{
    if(num==0)
        return;
    num_len(num/10,++flag);
    printf(flag%3==0 && num/10 ? ",%d": "%d",num%10);
}
void main()
{
    int num;
    cin>>num;
    num_len(num,0);
    printf("\n"); 
}
2009-12-26 23:41
养下就很帅
Rank: 2
等 级:论坛游民
帖 子:32
专家分:50
注 册:2007-8-3
收藏
得分:0 
谢谢你 时间长了 好多东西就搞混了 以为eof能直接用
不过你没看懂我的意思 今天又仔细把程序看看了 解决了
#include <iostream>
using namespace std;
int count=0;
int num_len(int num)
{
    int len=0;
    while (num!=0)
    {
        num/=10;
        ++len;
        if (len%3==0)
        {
            ++count;
        }
    }
    return len;
}
void main()
{
   
    int num,len;
    cin>>num;
    len=num_len(num);
        
        int size_char=len+count,sign=1,flag;
        bool first=true;
        flag=len%3;        
        char *a=new char[len+1];
        char *b=new char[size_char+1];   
        itoa(num,a,10);
        a[len]='\0';        
        b[size_char]='\0';   
        if (len%3==0)
        {
            first=false;
        }
        int i=0,j=0;
        while (a[i]!='\0')
        {
            if (j==flag&&first)
            {
                b[i]=',';
                first=false;
                sign=1;
                j++;
                continue;
            }        
            sign%=4;
            if (sign!=0)
            {
                b[j]=a[i];
                ++i;

            }
            else
            {
                b[j]=',';
            }
            ++j;
            ++sign;
        }
        cout<<b<<endl;
   
}

[ 本帖最后由 养下就很帅 于 2009-12-27 19:56 编辑 ]
2009-12-27 19:07
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
呵呵··LZ没运行我的代码怎么知道我没看懂,你试试我的程序,你的程序能做我的都可以。。。
2009-12-28 03:17
快速回复:字符串复制错误,帮忙看下
数据加载中...
 
   



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

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