1. 程式人生 > >生成連續的不限長度的數字字串

生成連續的不限長度的數字字串

#include <string>
#include <iostream>
using namespace std;

class NumString
{
public:
	NumString()
	{
		m_str = '0';
		m_iLenght = 1;
	}
	~NumString()
	{
	}
public:

	NumString& operator ++()
	{
		int len = this->m_iLenght;
		char c = m_str[len - 1];
		int n = c - '0';
		bool flag = n > 8;
		n = (++n) % 10;
		this->m_str[len - 1] = '0' + n;
		if(this->m_iLenght == 1 && flag)
		{
			this->m_str.insert(0, "1");
			this->m_iLenght++;
		}
		for(int i = len - 2; i >= 0; i--)
		{
			char c = m_str[i];
			int n = c - '0';
			if(flag)
			{
				n++;
				flag = n > 9;
				n = n % 10;
				this->m_str[i] = '0' + n;
				if(i == 0 && flag)
				{
					this->m_str.insert(0, "1");
					this->m_iLenght++;
					break;
				}
				
			}
			else
				break;
		}
		return *this;
	}

	const NumString operator ++(int)
	{
		NumString temp(*this);

		int len = temp.m_iLenght;
		char c = temp.m_str[len - 1];
		int n = c - '0';
		bool flag = n > 8;
		n = (++n) % 10;
		temp.m_str[len - 1] = '0' + n;
		if(temp.m_iLenght == 1 && flag)
		{
			temp.m_str.insert(0, "1");
			temp.m_iLenght++;
		}
		for(int i = len - 2; i >= 0; i--)
		{
			
			char c = temp.m_str[i];
			int n = c - '0';
			if(flag)
			{
				n++;
				flag = n > 9;
				n = n % 10;
				temp.m_str[i] = '0' + n;
				if(i == 0 && flag)
				{
					temp.m_str.insert(0, "1");
					temp.m_iLenght++;
					break;
				}
				
			}
			else
				break;
		}
		return temp;
	}

public:
	void SetValue(const string s)
	{
		this->m_str = s;
		this->m_iLenght = s.size();
	}

public:
	string m_str;
	int m_iLenght;
};

int main()
{
	NumString ns;
	for(int i = 0; i < 1000; i++)
	{
		++ns;
		cout << ns.m_str << endl;;
	}
	return 0;
}