提取 字符串中 数字

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
    char c[100];
    
    int find=0;
    int i=0,l;//'
    char te[50][50];
    
    int flag=0,num=0;//行列
    int stop=1;//是否为字母记号
    
    int temp=0,mark=0;//行,列
    
    printf("请输入一含有数字的字符串:\n");
    gets(c);
    l=strlen(c);
    while(1)//判断字符串中是否有字符数字,有则执行下一步,没有则重新输入
    {
        while(l)
        {
            if(c[l]>='0'&&c[l]<='9')//判断是否含有数字字符
            {
                find=1;
                break;
            }
            l--;
        }
        if(find)
            break;//有数字则退出循环
        else
            printf("没有数字!!! 请重新输入:\n");
        gets(c);//没有则重新出入
        l=strlen(c);            
    }
    
    
    l=strlen(c);
    printf("字符串长度为:%d\n",l);
    for(i=0;i<l;i++)//遍历数组
    {
        if(c[i]>='0' && c[i]<='9'|| c[i]=='.'|| c[i]=='-')
        {
            te[flag][num]=c[i];
            num++;
            stop=0;
            te[flag][num]='\0';
            if(c[i]=='-'&&c[i-1]>='0' && c[i-1]<='9')
            {
                te[flag][num-1]='\0';
                flag++;
                te[flag][0]='-';
                num=1;
            }
           
        }
        else if(stop==0)
        {
            te[flag][num]='\0';
            flag++;
            num=0;
            stop=1;
        }
        te[flag][num]='\0';
        
    }
    
    
     for(i=0;i<=flag;i++)//输出
     {
          mark=0;
          for(temp=0;te[i][temp]!='\0';temp++)
          {
           if(te[i][temp]=='.')
            { 
                printf("%f\n",atof(te[i]));
                mark=1;
            }
          }
          if(mark==0)
          printf("%d\n",atoi(te[i]));
     }
    
}

以下为别人代码,非原创

地址:http://www.jb51.net/article/41046.htm

#include<iostream>
using namespace std;
int main(){
    int a[30]={0};
    char str[200];
    cout<<"请输入一个含有数字的字符串\n"<<endl;
    cin>>str;
    bool flag=0;
    int i=0,j=0;
    int s=0;
    int num=strlen(str);
    cout<<"\n你一共输入了:"<<num<<"个字符"<<endl;
    for(i=0;i<num;){
        while(str[i]>='0' && str[i]<='9' &&i<num ){
            s=s*10+int(str[i])-int('0');
            i++;
            flag=1;
        }
        if(flag==1){
            a[j++]=s;
            s=0;
            flag=0;
        }
        i++;
    }
    i=0;
    cout<<"\n其中共"<<j<<"个数字\n"<<endl;
    while(i<j){
        cout<<a[i]<<endl;
        i++;
    }
    cout<<endl;
    return 0;
}

另一个

地址:http://wenku.baidu.com/view/416aa95f58f5f61fb636661d

#include<stdio.h>
#include"string.h"
#define false 0
#define true 1

void main()
{
    char c[100];
    int find=0;
    int j;
    int sum[30],num[50],i=0,l,s=0,N=1,g=0;
    printf("请输入一含有数字的字符串:\n");
    gets(c);
    l=strlen(c);
    while(1)//判断字符串中是否有字符数字,有则执行下一步,没有则重新输入
    {
        while(l)
        {
            if(c[l]>='0'&&c[l]<='9')//判断是否含有数字字符
            {
                find=1;
                break;
            }
            l--;
        }
        if(find)
            break;//有数字则退出循环
        else
            printf("没有数字!!! 请重新输入:\n");
        gets(c);//没有则重新出入
        l=strlen(c);            
    }


    l=strlen(c);
    printf("字符串长度为:%d\n",l);
    for(i=0;i<l;i++)//转换为数字
    {   
        
         if((c[i]>='0')&&(c[i]<='9'))
         {
             sum[s++]=c[i]-48;//单个字符数字转换为数字
             N*=10;
             if(c[i+1]<='0'||c[i+1]>='9'||c[i+1]=='\0')//判断下一个字符是否为字符数字,不是则执行下一步,即是否是一个连续的数
             {
                 num[g]=0;
                 N/=10;
                 for(j=0;j<s+1;j++)//连起来的数字转为一个整数
                 {
                     sum[j]*=N;
                     N/=10;
                     num[g]+=sum[j];
                 }
                 g++;//记录字符串中数字串的个数
                 s=0;//用于sum[30]重新存储下个字符数字
                 N=1;//用于字符数字转为数字
             }

         }
    }
    printf("字符中的数字个数有%d个\n",g);
    printf("字符中的数字分别为:\n");
    for(i=0;i<g;i++)//输出结果
        printf("%d\t",num[i]);
    printf("\n");   
    getchar();
    getchar();
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值