找数据(C++)

题目详情

编写程序,找出一个字符串中的所有数据然后加9输出(实数或整数)。

例如,China Daily | Updated: 2020-04-10 08:5.9,

输出:
2029
5
-1
17
14.9

单个正号或负号不算数据,但+0,-0都是数据。字符串总长度不超过200.

输入格式

一个带空格的字符串。

输出格式

若干行数据。

输入样例:

China Daily | Updated: 2020-04-10 08:5.9

输出样例:
2029
5
-1
17
14.9

 

 


 

个人思路
识别数字(C++)
这题是在上题的基础上加入了对实数的判断和处理,难点也在遍历的过程中判断出整数或实数。

我解题的思路依旧是以判断数字字符为核心。输入完字符串再进行遍历,在遍历过程中,如果发现发现了数字字符就判断前面是否有'-'(以决定该串数字的符号), 后判断是否有'.'(注意前面必须要有数字字符,否则就不是实数),后发现数字字符重复出现就进行相应的"叠加处理"(也就是根据是否有出现过'.'进行相对应的处理),然后每次存储完一段数字后记得重置相应的变量。
存储完各个数字后进行加9输出操作即可。

 

  • 了解了思路,下面的代码就比较容易了
#include 
#include 
using namespace std;
int fun1(char *p, double *p2)	//功能为收集该字符串中代表 实数或整数的 子串,并将该子串转换为相对应的数字 
{
    int i,flag=1,count=0, tmp=0,j=0, flag2=0; //flag用来决定该数的正负号,tmp用来决定该字串是否可以被添加进p2所指向的数组 ,flag2来决定是否可以开始增加其小数部分 
	double sum = 0.0,temp;
    if(p[0]>='0'&&p[0]<='9'){ //防止后面判断p[0-1]的时候越界访问 
 	 sum = p[0]-48;
 	}
 
 for(i=1;p[i]!='\0';i++)
 {
     if(p[i]>='0'&&p[i]<='9'){	
     	if(flag2==0){
      	sum = sum*10 + p[i]-48;
      	if(p[i-1]=='-') flag=-1;
      	tmp=1;
      }else{
      	sum = sum + (p[i]-48)*temp;
      	temp = temp*0.1;
      }
      
    }else if(p[i]=='.'){
     	if(p[i-1]>='0'&&p[i-1]<='9'){
     	  flag2=1;
     	  temp=0.1;
		}
		
	}else{
      if(tmp) {
      p2[j++]=flag*sum;
      count++;
      flag=1;  //重置flag、flag2、tmp 和 sum 
      flag2=0;
      tmp=0;
      sum=0.0;
     }
   }
 }
   if(tmp){
     p2[j++]=flag*sum;
     count++;
     }
  return count; //返回满足条件的个数 
}

void fun2(double *p, int n) //功能为输出 加9后的数据
{
    if(n==0) return ;
    int i; 
    for(i=0;i

 

你可能感兴趣的:(PTA/MOOC类题,(C语言/C++),#,MOOC类,算法,c++,mooc,字符串)