c++ 程序 统计一个字符串内的正整数和负整数个数

来源:互联网 发布:JS在图片上录入文字 编辑:程序博客网 时间:2024/06/01 10:46

昨天在CSDN http://topic.csdn.net/u/20090605/15/1cdff9e8-b8a5-4a9c-83e3-13d547c20bcd.html?seed=1509343730 看到一个人请求帮助写程序,我就写了一个给他回复了。

 

我的思路是输入一个字符串,然后把字符类元素替换为空格,然后统计里面的数字,根据负号判断是否是负数。另外为了求得总和,必须把字符串里面的数字序列转换为数值才行,用到求幂函数。为此需要统计有几个连续的数字,方可知道多少次幂。下面有注释。
/*输入一串字符,统计(输出)其中的正整数和负整数个数以及所有正整数的平均值 */

/*  Developed by Wanggang (c)2009 qduwg@163.com  QQ:987359426*/

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
string s;
int m,n,i,j,k,p,q,f=1,t=0,neg=0,pos=0;
cin>>s;
m=strlen(s.c_str());
for(i=0;i <m;i++)        //把非数字字符替换为空格
{
if(isalpha(s[i]))
s[i]=' ';
}
cout < <s < <endl;

i=0;
while(i <m)
{  k=0;
    while(1)
{if(s[i]==' ')
i++;
else
break;
}
p=i;          //记录非空格起点,即有数字开始了。
 
if(s[i]=='-') //判断是否是负号
{
if(isdigit(s[i+1]))//还要判断负号后面有没有数字,否则不算一个负数。
neg++;
    i=i+1;
    while(s[i]!=' '&&i <m)
i++;        //需要把指针移到此数后面。
/*k=i-p;            //如果统计负数的总和,可以加上此段代码。
for(j=p;j <i;j++)
{n=s[j]-30;
  t=t+pow(n,k--);
}
k=0;*/
}
else                  //否则就是正数
{while(isdigit(s[i])) //为了统计正数位数
i++;
pos++;
    k=i-p;                    //计算正数位数,下面要用。
for(j=p;j <i;j++)      //为了转换为数值,需要幂函数
{n=s[j]-0x30;
  t=t+n*pow(10,--k);    //位数k用在这里。
}
k=0;
}
i++;
}
cout < <" 正整数个数" < <pos < <"正数平均值" < <t/pos;

return 0;
}