【C语言】——提取字符串中的数字并将其存到一维数组中

**思路:当一个字符为数字且flag等于0则它为第一个数字
当一个字符为数字且flag不等于0那么它就是前面一个数字的连续数字 **
个人觉得比起其他的解法来这算是思路清晰,代码简短的了

/*
 时间: 2020/08/20 
 目的:提取字符串中的数字
 功能:增加对字符串操作的了解,如何判断字符串里的数字
       和如何将连在一起的数字作为一个整数存储
*/
#include<stdio.h>
void search(char*);

int main()
{
    char str[10000];
    printf("输入字符串:"); 
    gets(str);
 search(str); 
 return 0; 
}

void search(char *str){
   int i,j=0,flag=0,t=0,a[20];
   for(i=0;str[i]!='\0';i++){
      if(str[i]>='0'&&str[i]<='9'&&flag==0){//判断是不是第一个数字 
          flag=1;
          t=(int)str[i]-'0';//字符型强制转换为整型而且-'0'不能少 
   }
      else if(str[i]>='0'&&str[i]<='9'&&flag!=0)//判断是不是前一个数字后的连续数字 
          t=t*10+(int)str[i]-'0';
    else if(flag!=0){
     a[j]=t;
     j++;
     flag=0;
    }
   }
   if(str[i-1]>='0'&&str[i-1]<='9'){//如果最后一个字符是数字也可以将它输出 
               a[j]=t;
            j++;
          }
   printf("共有%d个数,分别是:\n",j);
   for(i=0;i<j;i++)
   printf("%d\t",a[i]);
}
/*
总结:当一个字符为数字且flag等于0则它为第一个数字
      当一个字符为数字且flag不等于0那么它就是前面一个数字的连续数字 
-----------------------
在dev中输出结果为 
输入字符串:A123x456 17960?302tab5876
共有5个数,分别是:
123     456     17960   302     5876          正确 
----------------------- 
*/
  • 14
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用 C 语言实现的代码,可以实现将字符串数字提取出来,并存放到一个新的: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main() { char str1[] = "hello123world456"; // 定义一个字符串 int num_list[100]; // 定义一个组,用来存储提取出来的数字 int i = 0, j = 0, num = 0; while (str1[i] != '\0') { if (isdigit(str1[i])) { // 如果当前字符是数字 num = num * 10 + (str1[i] - '0'); // 将当前数字累加到 num 变量 } else { // 如果当前字符不是数字 if (num > 0) { // 如果 num 变量存储了数字 num_list[j++] = num; // 将 num 存储到,并将 j 加 1 num = 0; // 将 num 变量清零 } } i++; // 将 i 加 1,继续遍历字符串 } if (num > 0) { // 如果 num 变量存储了数字 num_list[j++] = num; // 将 num 存储到,并将 j 加 1 } // 打印提取出来的数字组 for (i = 0; i < j; i++) { printf("%d ", num_list[i]); } printf("\n"); return 0; } ``` 在上面的代码,我们使用了 C 语言自带的标准库函库,包括 `stdio.h`、`stdlib.h`、`string.h`、`ctype.h`。我们使用一个 while 循环遍历字符串的每一个字符,如果当前字符是数字,则将其累加到 `num` 变量;如果当前字符不是数字,则将 `num` 变量存储的数字存储到,并将 `num` 变量清零。最后,我们打印存储数字组,就可以得到提取出来的数字了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值