提取字符串(C语言)

提取字符串(C语言)

写个博客跨年啊(><)新年快乐!平平安安!
直接上图:
在这里插入图片描述
一看这种题目,就知道----好绕! 好多坑!这该死的细节!

  • 坑1: xxx.42xxx 输出0.42噢
  • 坑2:
    xxx123
    456xxx 输出123456噢
    -xxx123
    .456xx 输出123.456噢
  • 细节1:怎么提取数字?
  • 细节2:浮点数怎么排序?

淦,不写了xxx,迫于压力,还是绞尽脑汁撸出来了(哭唧唧
不说废话,上思路:

1.准备工作

  • 多行输入的结束通过判断EOF,即ctrl+z
  • 开个二维数组存所提取的数字字符串:m[j][k]
  • 用atof函数将字符串转为浮点数,并用double的数组num[35]储存。(注意atof是返回double,我以为是float然后出错了)
  • 用qsort进行排序,注意到:
    void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
    compar函数返回的是int类型,所以将其变式:
    return *(double *)a < *(double *)b ? 1 : -1;

2 .主体部分

  • 用 isdigit函数判断是否为数字,开始提取
  • 如果该行最后一个是数字的话,立个flag:
    f = 1;
    交给下一行,并判断下一行开头是否为数字,是就在原提取的数字末尾继续添加(k), 并撤回数字个数(j)的递增:
    k += 1; j -= 1;
  • 如果遇见.数字的情况,在开头补0,然后再转入数字的提取,同样立个flag:
    f1 = 1;

3 .代码部分

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int j=0, k=0, f=0, f1=0, sum=0;
char m[35][25] = {
   "0"};        //m[j][k]数字字符串数组,j为数字的个数,k为数字的长度 
double num[35] = {
   0};
int cmp(const void *a, const void *
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X to Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值