我有一个存放了ISBN码的文件,数据格式形如0-452265-45-5。
现在要求取出文件中的数据进行运算。取出的数字要求是04、5226。5455。
(计算哈希值)。那么有没有什么快截的方法可以办到?
有两个方法我已经知道:
第一。直接以数据类型输出,然后用算术办法截取数字。
第二,用指针来做。然后把字符转为数字。
请问有没有第三种更快更好的?

解决方案 »

  1.   

    首先读出来
    去掉所有的-
    用字符串切取函数分别取出 
    用atoi转化  
      

  2.   

    这个方法其实就是用指针啊。atoi的参数类型不是char*么?
      

  3.   

    将其转换为CString类型,去掉'-'号,然后调用CString的成员函数来取字符串
      

  4.   

    不是很明白,能否说的更详细点?
    不怕老实说,我的VC++还是初学者,菜鸟级的那种……
    sigh ;p
      

  5.   

    自己做一个简单类:
    class Sign
    {
    public:
       void sign(const wchar_t*);//check value and initailize them;
       int GetHead(void);//get head part
       int GetMid(void); //get mid part
       int GetTail(void);//get tail part
    private:
       int m_iHead;
       int m_iMid;
       int m_iTail;
    };
      

  6.   

    有点看不懂?
    如果是存在文件里,敢问这位大侠,你打开文件用的是什么???只要你是用ifstream或者fstream,那么当你将文件名传给ifstream、fstream的constructor或者用open()成员函数打开一个如你说的那种小文件的时候,文件的全部内容就已经保存在buffer中了。以后的所有操作,凡是涉及读取或写入文件,都是从buffer中通过指针来进行。最快的方法依我看就是利用类似strstrambuf的这类东西(用STL中的string效果比较好)作为ifstream或者fstream的buffer进行在内存格式化(比如说去掉“-”),然后设计一个类,并为之重载operator>>(这样可以跳过atoi()),通过operator>>来初始化数据成员。但是这依然是使用指针。从根本上来讲,不管你用什么方式打开一个文件(text or bin,当然,必须和你存进去的时候使用的mode一样),读进内存里并用来进行操作的依然是char*,不会有第二种东西。
    建议你好好回顾一下标准I/O流库。给你一个小提示:
    ifstream ifs("youfilename", ios::in); //缺省是text mode
    cout << ifs.rdbuf() << endl; //如此就可以输出整个文件,可见rdbuf()返回的是一个类似指针的东西
      

  7.   

    Cuttloefish,非常感谢你的建议。虽然我还是不太懂……
    我打算把分给你,可是怎么给你呢?