生成連續的不限長度的數字字串
阿新 • • 發佈:2018-12-18
#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; }