回 帖 发 新 帖 刷新版面

主题:c++小问题

请问大家,如何实现讲一个整数转变为一个字符串,整数的位数并不知道!然后逆序输出!

回复列表 (共15个回复)

沙发

gcvt

板凳


[code=c]
#include<stdio.h>
void itoa(long i,char *s)
{   if(i==0)
        return;
    *s=i%10+'0';
    itoa(i/10,s-1);
}
int main()
{   long n;
    char str[7]="";
    scanf("%ld",&n);
    itoa(n,str+5);
    printf("%s",str);
}

[/code]

3 楼


[code=c]
/********************************************************************
    created:    2010/03/11
    created:    11:3:2010   18:30
    filename:     main.cpp
    file path:    ..\pfan_tst3
    file base:    main
    file ext:    cpp
    author:        adam
    
    purpose:    exercise
*********************************************************************/
#include <iostream>
#include <vector>
using namespace std;

class TIntToStr
{
    friend istream& operator>> (istream&, TIntToStr&);
    friend ostream& operator<< (ostream&, TIntToStr&);
public:
    TIntToStr(unsigned long = 0);
    ~TIntToStr();
    char* GetString(void) const;
private:
    static const int maxbuffersize = 16;
    unsigned long _number;
    mutable vector<char> _buffer;
    mutable char*  _c_str;
    void Convert(void) const;
};

inline TIntToStr::TIntToStr(unsigned long nValue)
: _number(nValue)
{
    _c_str = new char [maxbuffersize];
    Convert();
}

inline TIntToStr::~TIntToStr()
{
    delete [] _c_str;
}

inline istream& operator>> (istream& is, TIntToStr& its)
{
    cout << "please input a integer to conver..." << endl;
    is >> its._number; // need verdict
    its.Convert();

    return is;
}

inline ostream& operator<< (ostream& os, TIntToStr& its)
{
    os << "----------------------\n";
    for (int ix = 0; ix < its._buffer.size(); ++ix)
        os << its._buffer[ix] ;
    os << endl;

    return os;
}

inline void TIntToStr::Convert() const
{
    unsigned long nTmp = _number;
    unsigned long nQuot;
    int        nRes;
    while (nTmp != 0)
    {
        nQuot = nTmp / 10;
        nRes = nTmp % 10;
        nTmp = nQuot;
        char cc = (char)nRes + '0';
        _buffer.push_back(cc);
    }
}

inline char* TIntToStr::GetString() const
{
    int nIndex = 0;
    for (vector<char>::iterator iter = _buffer.begin(); iter != _buffer.end(); ++iter)
        _c_str[nIndex++] = *iter;
    _c_str[nIndex] = '\0';

    return _c_str;
}

#include <stdlib.h>
int main(int, char **, char **)
{
    TIntToStr tiTest;
    cin >> tiTest;
    cout << tiTest << endl;
    
    char* pNumStr = tiTest.GetString();
    printf(pNumStr);
    
    puts("\n");
    unsigned long nHuge = 1233456;  //整数
    TIntToStr tiTest2(nHuge);
    printf(tiTest2.GetString());    //c-style string 麻烦喜欢c++的请注意此行,每看到这个形式,我激动的都出汗。c++power之一。

    system("pause");

    return EXIT_SUCCESS;
}
[/code]

4 楼


希望quhailiang1984同学不要再说我的代码是大材小用了。:)
quhailiang1984:很多种方式都可以完成一个过程,没有定式,但有规则。上述你写出的方式功能应该没有问题,但是,对于程序设计来说,我们追求的是弹性。希望能仔细揣摩下。代码附上。个人意见,仅供参考。听说你是学数学的,有时间可以聊数学了。我学计算机的,但喜欢数学。

5 楼

[quote]
希望quhailiang1984同学不要再说我的代码是大材小用了。:)
quhailiang1984:很多种方式都可以完成一个过程,没有定式,但有规则。上述你写出的方式功能应该没有问题,但是,对于程序设计来说,我们追求的是弹性。希望能仔细揣摩下。代码附上。个人意见,仅供参考。听说你是学数学的,有时间可以聊数学了。我学计算机的,但喜欢数学。[/quote]

不敢不敢,您是前辈,向你学习!我是学数学的,很喜欢编程,将来很可能从事计算机方面的工作,好多不懂的还要向你请教!

6 楼


好长啊!可是我自学的c++才看到函数!类还没有看完啊!所以暂时看不懂高手的代码!不好意思!不过还是要谢谢你

7 楼


谢谢!   拿去好好研究研究

8 楼


为什么我拿这个编译不成功呢?

9 楼

vs2003以上版本都没问题。gcc我没试。icl编译通过。

10 楼

[quote][quote]
希望quhailiang1984同学不要再说我的代码是大材小用了。:)
quhailiang1984:很多种方式都可以完成一个过程,没有定式,但有规则。上述你写出的方式功能应该没有问题,但是,对于程序设计来说,我们追求的是弹性。希望能仔细揣摩下。代码附上。个人意见,仅供参考。听说你是学数学的,有时间可以聊数学了。我学计算机的,但喜欢数学。[/quote]

不敢不敢,您是前辈,向你学习!我是学数学的,很喜欢编程,将来很可能从事计算机方面的工作,好多不懂的还要向你请教!
[/quote]

哪里来的前辈。别这么说了。雪光风剑又该BS我了。嘿嘿。都是同学而已。

我来回复

您尚未登录,请登录后再回复。点此登录或注册