提取字符串中的数字

最近在做《算法竞赛入门经典》时,有道题是 乘积的末三位。 要求:输入若干整数(可以是正数、负数或者零),输出他们的乘积的末三位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略他们。

思考之后,其实这道题的难点就是提取数字。在网上查找相关资料时,有网友提出atoi的函数可以从字符串中提取数字,确实是这样。不过还有就是要把里面的数字全都提取出来,那就把指针加上这个数字的长度。

代码如下(没有提供末三位的代码):

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char buf[] = "aaaBBB++++123ad-345dd";
    int  num = 0, count = 0, sum = 1;
    char *p;

    p = buf;
    while (*p != '\0')
    {
        if ((*p > '0' && *p <= '9') || (*p == '+' || *p == '-')) //判断是否是数字的起点
        {
	       	if(*p == '+' || *p == '-')			//判断是否有征服号
	       		if(!(*(p+1) > '0' && *(p+1) <= '9') )	//判断下一个字符是否为数字
	       		{
		       		p++;				//若不是数字则此正负号是字符,跳出继续循环
	       			continue;
	       		}
	       		else count =  1;<span style="font-family: Arial, Helvetica, sans-serif;">			//是数字则数字长度加1,因为atoi不记入字符</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
	       	num = atoi(p);
	       	
	        if(*(p-1) == '-')				//如果是负数,则乘以-1,sum计算乘积
                sum= -1*sum*num;
                else 
                sum *= num;											
            
                printf("num = %d\n", num);
                while (num / 10 != 0) 
<span style="white-space:pre">		</span>{				//计算数字位数
			++count;
			num = num / 10;
		}
		p=p+count+1;			//转到数字下一位 +1是因为算位数的时候少算了一位
		continue;
     	  }
     	 
     	       	p++;						//是字符则指针后移一位
    }
  
    printf("sum = %d\n", sum);
    return 0;
}		
		
这道题的关键是取字符串中的数字。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值