永发信息网

sscanf函数---一个简单的问题

答案:4  悬赏:40  手机版
解决时间 2021-02-05 07:23
#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是没有办法实现你的要求,而且用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,就可以实现字符串的分割及转换。 <---- 再次强调,这不是好方法。
全部回答
#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; }
#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; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯