#include <stdio.h>
int main(){
char s[20000];
int a[20000],i;
fgets(s,20000,stdin); //如输入:22 33 44 55 66 77
//此处怎么利用sscanf函数将s中的数字转到a中?
for(i=0;i<这里的大小是多少?;i++)
printf("%d",a[i]);
return 0;
}
在线等.....
sscanf函数---一个简单的问题
答案:4 悬赏:40 手机版
解决时间 2021-02-05 07:23
- 提问者网友:泪痣哥哥
- 2021-02-04 09:29
最佳答案
- 五星知识达人网友:低音帝王
- 2021-02-04 09:48
这个问题不简单,只用一句sscanf是没有办法实现你的要求,而且用ssanf也不是好的方法, strtok虽然也不好,但这这里比sscanf的方案好。 如果非用sscanf,则需要间接转换,如下:
int n;
int *pa = a;
char ch[5];
char *ps = s;
while( sscanf(ps, "%[^ ] %n", ch, &n) == 1 )
{
printf("%s\n", ch);
sscanf(ch, "%d", pa++);
ps += n;
}这样通过1个循环和2个sscanf,就可以实现字符串的分割及转换。 <---- 再次强调,这不是好方法。
int n;
int *pa = a;
char ch[5];
char *ps = s;
while( sscanf(ps, "%[^ ] %n", ch, &n) == 1 )
{
printf("%s\n", ch);
sscanf(ch, "%d", pa++);
ps += n;
}这样通过1个循环和2个sscanf,就可以实现字符串的分割及转换。 <---- 再次强调,这不是好方法。
全部回答
- 1楼网友:大漠
- 2021-02-04 11:57
#include <stdio.h>
int main()
{
char s[20000];
int a[20000],i;
char* ps = s;
int len;
fgets(s,20000,stdin);// 22 33 44 55 66 77
i=0;
while( sscanf(ps, "%d %n", &a[i++], &len) == 1 )
{
ps += len;
}
//注意 i为a中元素个数加1 i=1 时候0个元素
return 0;
}
- 2楼网友:拜訪者
- 2021-02-04 11:07
#include "stdafx.h"
int main(int argc, char* argv[])
{
char a[]="b12yx456~924?abc123x",c[10];
int b[20];
int i,j,n=0,k=0;
int y;
for(i=0,j=0;a[i]!='\0';i++)
{
if(a[i]>=48 && a[i]<=57)
{
n++;
if(n>=1)
{
c[j]=a[i];
j++;
}
}
else if(n>=1)
{
sscanf(c,"%d", &y);
b[k]=y;
k++;
n=0;
j=0;
}
}
for(i=0;i
- 3楼网友:woshuo
- 2021-02-04 10:54
用 if (s[i]==' ' && ((s[i+1] >= '0') && (s[i+1] <= '9'))) 找各数字开始位置 做 转换。
#include <stdio.h>
#include <stdlib.h>
int main(){
char s[2000];
int a[2000],i,n;
fgets(s,2000,stdin); // if input 22 33 44 55 66 77
sscanf(s,"%d",&a[0]);
n=1;
for (i=1;i<strlen(s)-1;i++)
{
if (s[i]==' ' && ((s[i+1] >= '0') && (s[i+1] <= '9')))
{sscanf(&s[i+1],"%d",&a[n]); n++;}
}
for(i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯