C++ 取出字符串中的所有整数
谭浩强 C++程序设计(第三版)P189 第16题
输入一个字符串,内有数字和非数字字符,如
a123x456_17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一个数组a中。统计总共有多少个整数,并输出这些数。
这个问题是比较好解决的,主要是三步
-
开辟一个
int a[(n+1)/2];
大小的整数数组a,(n+1)/2 是字符串中能够包含的至多个整数了。 初始化一个数字统计int total = 0;
,用来累计出现过的数字总数。 -
遍历字符串,比对是否是数字,如果是 压入栈中,如果不是,将栈逐步清空并将取出的若干个数字计算为十进制数,其中每次出栈,将进制+1,则可以顺利求出。 每次得出一个新整数,
total++
。 -
以total为终,遍历a并输出。
#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;
}
最近回复