求解个小程序

wdxy520 2011-09-18 10:54:24
输入一个字符串 比如 123eras23da1dfa4fds556df3355dsf 抽出其中的数字放在一个数组中 里面比如 123 23 1 4 556 3355
六个元素 求解啊 谢谢
...全文
163 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
alweeq86 2011-09-20
  • 打赏
  • 举报
回复
int main()
{
char s[]="123eras23da1dfa4fds556df3355dsf";
char *p=s;
char a[10]={0},b[10]={0};
while(1)
{
int r=sscanf(p,"%[1-9]%[a-z]",&a,&b);
cout<<a<<" "<<b<<endl;
p+=strlen(a)+strlen(b);
memset(a,0,10);
memset(b,0,10);
if(r==-1) break;
}
return 0;
}
孤雲独去闲 2011-09-20
  • 打赏
  • 举报
回复

#include <stdio.h>
#define N 50
int main()
{
char str[N];
int arr[N];
int i,n=0;
printf("Enter str:\n");
gets(str);
arr[0]=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(!arr[n]) arr[n]=str[i]-'0';
else arr[n]=arr[n]*10+str[i]-'0';
}
else
{
if(!arr[n]) continue;
else
{
n++;
arr[n]=0;
continue;
}
}
}
if(str[i-1]<'0'||str[i-1]>'9') n--;
for(i=0;i<=n;i++)
printf("%-6d",arr[i]);
getchar();
getchar();
return 0;

}
wenhongang 2011-09-19
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
char a[200]={0},get;

int flag,i=0;//flag用来标识上一个字符是保存的空格还是非空格
char *p=a;
while((get=getchar())!='.')
{
if(get<='9' && get>='0')
{
p[i++]=get;
flag=1;
continue;
}
if(flag==1 && (get>'9' || get<'0'))//如果上一个字符不是空格则保存空格,否则跳过此处继续循环
{
flag =0;
p[i++]=' ';
continue;
}

}
printf("%s",a);
return 0;
}
cocoabird 2011-09-19
  • 打赏
  • 举报
回复
基础没学好啊
AndyZhang 2011-09-19
  • 打赏
  • 举报
回复
这个不难吧
快乐的小菜鸟 2011-09-19
  • 打赏
  • 举报
回复
你的结贴率会越来越低的少年 已经有很多代码了 研究吧
luosimuer 2011-09-19
  • 打赏
  • 举报
回复
我写的这个是提取出数字 并且有小到大排列 这是华为的一道笔试题 楼主可以看其中提取数字的一段
luosimuer 2011-09-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

#define LEN 1024
#define NUM 20

int flag = 0;

void order(int b[],int array_num)
{
int i = 0;
int j = 0;
for(i = 0 ; i <= array_num ; i++)
{
for(j = i + 1 ; j <= array_num ; j++)
{
if(b[i] > b[j])
{
b[i] ^= b[j];
b[j] ^= b[i];
b[i] ^= b[j];
}
}
}

for(i = 0 ; i <= array_num ; i++)
{
if(i != array_num)
{
printf("%d-",b[i]);
}
else
{
printf("%d\n",b[i]);
}
}
}

void deal_string(char *p)
{
int a[20] = {0};
int i = 0;
int x = 0;
while('\0' != *p)
{
x++;
if((*p - '0' >= 0) && (*p - '0' <= 9))
{
break;
}
p++;
}
while('\0' != *p)
{
int k = 0;
if(((*p - '0') < 0) || ((*p - '0') > 9))
{
flag = 1;
}
else
{
printf("%d\n",(*p - '0'));
if(1 == flag && k != x)
{
i++;
}
a[i] = a[i] * 10 + (*p - '0');
flag = 0;
}
p++;
k++;
}

order(a,i);
}

int main()
{
char *p = (char *)malloc(sizeof(char) * LEN);
printf("please input your strings :\n");
scanf("%s",p);
printf("the string you input is %s\n",p);

deal_string(p);

free(p);
p = NULL;
return 0;
}


我写的 但是觉得写的比较复杂 请高手们帮我指正一下
阿尼小码 2011-09-19
  • 打赏
  • 举报
回复
你的基础不好啊,努力学习
zhaopeng2511 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]

C/C++ code
#include <stdio.h>
int main() {
char s[]="123eras0.23da1e10dfa-4e-2.0.1fds556df33-55dsf";
char *p;
int r,n;
double v;

p=s;
while (1) {
r=sscanf(p,"%lf%n",……
[/Quote]
赵大侠,r=sscanf(p,"%lf%n",&v,&n);这句中%n具体作用是做什么,表示不懂……
赵4老师 2011-09-19
  • 打赏
  • 举报
回复
#include <stdio.h>
int main() {
char s[]="123eras0.23da1e10dfa-4e-2.0.1fds556df33-55dsf";
char *p;
int r,n;
double v;

p=s;
while (1) {
r=sscanf(p,"%lf%n",&v,&n);
if (1==r) {
printf("%lg ",v);
p+=n;
} else if (0==r) {
p++;
} else break;
}
return 0;
}
//123 0.23 1e+010 -0.04 0 0.1 556 33 -55
赵4老师 2011-09-19
  • 打赏
  • 举报
回复
#include <stdio.h>
int main() {
char s[]="123eras23da1dfa4fds556df3355dsf";
char *p;
int r,v,n;

p=s;
while (1) {
r=sscanf(p,"%d%n",&v,&n);
if (1==r) {
printf("%d ",v);
p+=n;
} else if (0==r) {
p++;
} else break;
}
return 0;
}
//123 23 1 4 556 3355
Leaveye 2011-09-19
  • 打赏
  • 举报
回复
随便写个小函数。所有需要的知识点,在这里都有了。
char **filterDigits( const char *str ) {
char *const s = strdup( str );
char **a, **t;
char *p, *q, *r;
int n;
for ( n=1, p=q=r=s; *p; p++ )
if ( isdigit( *p ) )
*q++ = *p;
else if ( q != r )
*q++ = ',', r = q, n++;
*q++ = '\0';
a = (char **) calloc( n, sizeof(char *) );
for ( t=a, p=s; r=strtok_r( p, ",", &q ); p=NULL )
*t++ = r;
*t = NULL;
return a;
}
zhaopeng2511 2011-09-19
  • 打赏
  • 举报
回复
#include<stdio.h>
int fun(char *src,int *des)
{
int i=0;
while(*src!='\0')
{
while(*src>47&&*src<58) /* 将连续的数字相加存入一个数组元素 */
{
des[i]*=10;
des[i]+=(*src-48);
src++;
}
if(des[i]!=0||*(src-1)=='0') /* 0也要存入,存完自增 */
i++;
src++;
}
return i;
}
void main()
{
int des[50]={0}; /* 初始化 */
int i,k;
k=fun("123eras23da1dfa4fds556df3355dsf",des);
for(i=0;i<k;i++)
printf("%d ",des[i]);
printf("\n");
}

小类人猿 2011-09-18
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int i,j=0;
char str[]={"123eras23da1dfa4fds556df3355dsf"};
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='0'&&str[i]<='9'){str[j++]=str[i];printf("%c",str[i]);}
if((str[i]<'0'||str[i]>'9')&&(str[i+1]>='0'&&str[i+1]<='9'))printf("\n");
}
str[j]='\0';
printf("\n");
}
楼主这是我写的一个程序,在VC的条件下
Jake443403168 2011-09-18
  • 打赏
  • 举报
回复


#include <iostream>
#include <cstdio>
using namespace std;

void getNum(const char *str)
{
int result=0;
while(*str++!=0)
{
if('0'<=*str && *str<='9')
{
result=result*10+*str-'0';
}
else
{
if(result!=0)
{
cout<<result<<endl;
result=0;
}
}

}
}

int main()
{
char buf[100];

fgets(buf,100,stdin);
getNum(buf);

return 0;
}




69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧