#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();
}