| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:一道编程题目不会做
只看楼主 加入收藏
雪天
Rank: 1
等 级:新手上路
帖 子:18
专家分:5
注 册:2009-7-23
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:6 
一道编程题目不会做
题目:
设计函数模板template<class T> int DivideData(char *s,T para[],char mark=' '),
将字符串s中的数据分离后依次存储到数组para中,mark是数据之间的分隔符。
例如,s的值可能是:12,34,578,-90,63或1.2 3.4  -45.67  83。
搜索更多相关主题的帖子: 函数模板 
2009-07-24 07:08
雪天
Rank: 1
等 级:新手上路
帖 子:18
专家分:5
注 册:2009-7-23
收藏
得分:0 
这么多天了,没有人会吗?
2009-07-30 18:21
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:6 
Microsoft Visual C++ 6.0(版本6.0.8168.2)下调试通过
//文件 DevideData.h
#include <sstream>
template<class T>
int DivideData(char *s,T para[],char mark=' ')
{
    T data;
    int i=0;
    if(mark!=' ')
        while(s[i])
            if(s[i]==mark)
                s[i]=' ';
    i=0;
    istringstream st(s);
    while(st)
    {
        st>>data;
        para[i]=data;
        i++;
    }
    return 1;
}

//文件 ??.cpp
#include <iostream>
#include "DevideData.h"
using namespace std;
void main()
{
    char*s="1.2 3.4  -45.67  83";
    float p[4];
    DivideData(s,p,' ');
    for(int i=0;i<4;i++)
      cout<<p[i]<<endl;
}

[[it] 本帖最后由 CrystalFan 于 2009-7-30 19:42 编辑 [/it]]
2009-07-30 19:08
zinc
Rank: 2
等 级:论坛游民
帖 子:18
专家分:66
注 册:2009-7-28
收藏
得分:6 
怎么分离法?
逗号?空格?
2009-07-30 19:17
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
通过参数char mark确定
2009-07-30 19:20
tinjp
Rank: 5Rank: 5
等 级:职业侠客
帖 子:52
专家分:340
注 册:2006-11-4
收藏
得分:6 
//以下代码在gcc3.4.5下编译通过
#include <iostream>
#include <sstream>

using namespace std;

template<class T>
int DivideData(char *s,T para[],char mark=' ')
{
    string str;
    int ret = 0;

    try
    {    
        while(*s)
        {
            if (*s != mark)
            {
                str.append(s,1);
            }
            else
            {
                if (!str.empty())
                {
                    istringstream stream(str);
                    stream >> *para;
                    para++;
                    str.clear();    //vc6没有clear函数,可以用resize(0)代替。
                    ret++;
                }
            }
            s++;
        }
        istringstream stream(str);
        stream >> *para;
        ret++;
    }
    catch(...)
    {
        return ret;
    }
    return ret;
}

int main()
{
    char *s = "12,34,578,-90,63";
    int p[5];
    DivideData<int>(s,p,',');
    for (int i = 0; i < 5;i++)
        cout<<p[i]<<endl;
    return 0;
}
2009-07-30 19:25
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
tinjp 真是牛人啊!连异常处理都写了,很专业啊!请多多指教!
2009-07-30 19:39
快速回复:一道编程题目不会做
数据加载中...
 
   



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

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