谭浩强 C++程序设计(第三版)P189 第16题
输入一个字符串,内有数字和非数字字符,如
a123x456_17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一个数组a中。统计总共有多少个整数,并输出这些数。
这个问题是比较好解决的,主要是三步
int a[(n+1)/2];
大小的整数数组a,(n+1)/2 是字符串中能够包含的至多个整数了。 初始化一个数字统计 int total = 0;
,用来累计出现过的数字总数。
total++
。
#include <iostream>
#include <stack>
using namespacing std;
int getNumberFromStack( stack &s ){ // 传递引用
int level = 1;
int number= 0;
while( !stack.empty() ){
number += stack.top() * level;
stack.pop();
level *= 10;
}
return number;
}
int main(){
string s;
cout << "请输入一个字符串,如a123x456_17960?302tab5876。\n";
cin >> s;
int a[ (s.size() + 1)/2 ];
int total = 0;
stack<int> numberStack;
for( unsigned int i =0; i< s.size(); i++ ){
if( s[i]<='9' && s[i]>='0' ){
numberStack.push( s[i]-0 );
}else if( !numberStack.empty() ){
a[total++] = getNumberFromStack( numberStack );
}
}
// 输出全部数字
for( int k=0; k < total; k++ ){
cout << a[k] << "\n";
}
return 0;
}