C语言 将用户输入的字符串中的所有数字提取出来

#include <stdio.h>
void main()
{
char str[80],digit[80];
char *ps;
int i=0;
gets(str);
ps=str;
while(*ps!='\0')
{
if(*ps>='0'&&*ps<='9')
{
? ?
i++;
}
? ?
}
? ?
printf("%s\n",digit);
}
请问三个问号行应该怎么填。。为什么

#include<stdio.h>

#include<math.h>

#include<stdlib.h>

intmain()

{

intz=0;

intt,i;

int*p;

intm=0;

ints=0;

chara[10];//输入一个字符串到a[6]

printf("请输入一个字符串\n");

scanf("%s",a);//输入字符串

for(i=0;i<10;i++)//计算a[6]中的数字个数

{

if(a[i]>='0'&&a[i]<='9')

m++;

}

if(m==0)

printf("字符串中没有数字\n");

p=(int*)calloc(m,sizeof(int));//动态数组

for(i=0;i<10;i++)

{

if(a[i]>='0'&&a[i]<='9')

{

*(p+s)=a[i]-48;

s++;

}

}

//组成新的整数

for(t=0;t<m;t++)

{

z+=(*(p+t))*pow(10,m-(t+1));//组成新的整数

}

printf("新组成整数:%d\n",z);

free(p);

}

kuo

扩展资料

C语言实现将字符串的数字提取为整数

#include<stdio.h>

intStringToInteger(char*p)

{

intvalue=0;

while(*p!='\0')

{

if((*p>='0')&&(*p<='9'))

{

value=value*10+*p-'0';

}

p++;

}

returnvalue;

}

intmain(void)

{

char*str="112.123.156.1";

intval=0;

val=StringToInteger(str);

printf("value=%d\n\r",val);

getchar();

return0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-18

#include <stdio.h>

void main()

{

char str[80],digit[80];

char *ps;

int i=0;

gets(str);

ps=str;

while(*ps!='\0')

{

if(*ps>='0'&&*ps<='9')

{

digit[i]=*ps;//若当前字符是数字字符,保存到digit【i】里面,并且i的下标加1i++;

}

ps++;//不管是不是,判断完当前的字符*ps之后,ps++,表示移动到下一个字符判断。

}

digit[i]='\0';//给保存数字字符的字符数组加上个结束符号‘\0’,因为printf(%s)是以'\0'表示字符结束的。

}

提取字符串中数字,输出整型数:

while写法:

a='abc12d345'

i=0;

b=0;

while i<len(a):

if '0'<=a[i]<='9':

b=b*10+int(a[i])

i+=1;

print(b)

for写法:

a="abc12d345"

b=0;

for i in a:

if '0'<=i<='9':

b=b*10+ord(i)-48

print(b)

扩展资料:

提取字符串的数字:

将用户输入的字符串中的所有数字提取出来核心思想是每找到一个连续的数字子串,就分别用两个指针begin和end来标记它,并且每当处理完一个数字子串,就将新的起点设在上一次数字子串结尾的后一个的字符上,直到起始位置的字符为空,则遍历结束。

#include <stdio.h>

void main (void)

{

char a[15]={'0','-','1','2','3','-','4','1','5','6','2','-','4','\0','\0'};

int b[10];

int i,j;

j=0;

for(i=0;a[i]!='\0';i++)

{

if(a[i]>='0'&&a[i]<='9')

{

b[j]=a[i]-'0';

j++;

}

}

for(i=0;i<j;i++)

{

printf("b[%d]:%d\n",i,b[i]);

}

}

本回答被网友采纳
第2个回答  2013-05-24
#include <stdio.h>
void main()
{
char str[80],digit[80];
char *ps;
int i=0;
gets(str);
ps=str;
while(*ps!='\0')
{
if(*ps>='0'&&*ps<='9')
{
digit[i]=*ps;//充入digit中
i++;
}
ps++;//ps后移
}
digit[i]='\0';//在字符串最后填一个'\0'作为结束符
printf("%s\n",digit);
}

第3个回答  推荐于2017-09-03
#include <stdio.h>
void main()
{
 char str[80],digit[80];
 char *ps;
 int i=0;
 gets(str);
 ps=str;
 while(*ps!='\0')
 {
  if(*ps>='0'&&*ps<='9')
  {
  digit[i]=*ps;    //找到数字,存放到数组digit里
  i++;
  }
  ps++;    //ps指针指向字符串下一个字符
}
digit[i]='\0';    //为了能用%s输出,digit在末尾要加一个结束字符'\0'
   printf("%s\n",digit);
}

本回答被提问者采纳
第4个回答  2013-05-24
楼主采纳我吧

#include <stdio.h>
void main()
{
char str[80],digit[80];
char *ps;
int i=0;
gets(str);
ps=str;
while(*ps!='\0')
{
if(*ps>='0'&&*ps<='9')
{
digit[i]=*ps;//若当前字符是数字字符,保存到digit【i】里面,并且i的下标加1
i++;
}
ps++;//不管是不是,判断完当前的字符*ps之后,ps++,表示移动到下一个字符判断
}
digit[i]='\0';//给保存数字字符的字符数组加上个结束符号‘\0’,因为printf(%s)是以'\0'表示字符结束的
}
相似回答