回 帖 发 新 帖 刷新版面

主题:如何修改算法,提高效率

要的效果是,在一串字符串中,把连着的整数存入数组中,然后在输出,
就是说 ,如34df345的这个串中,把34放入数组中 ,345放入数组中,然后输出使为这两个数,,但是 ,我的算法很是繁琐,,希望各位能够修改一下算法来提高算法的效率
   #include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define A printf("fd");/* 测试用*/
#define B if(a[i]>=32627)printf(" 越界:");
int  j; int i;
main()
{char s[10],r[10];/*s用来存放字符串,r来存放找到的单个的数子,而a[]来存放
                    连着的整数*/
    int a[10];
    
    
    printf("\n请输入值\n");
    gets(s);
 printf("\n开始处理:\n");
 i=0;
 j=0;
do
 
 { 
     do
     
       {
           if ((s[i]>='0')&&(s[i]<='9'))
            { r[j]=s[i];/* 作用是由r[j]来记录找到的单个的整数,如s[0]=0
                          那么这个r[j]=0,然后如果s[1]=1,i++,j++后,r[j]存入1
                            给后面的switch语句用*/
              i++;
              j++; 
               }
              else
            i++;
   
 }while((s[i]>='0')&&(s[i]<='9'));/* 一个内部的do while循环*/
  switch(j)
{    case  0:a[0]=0;break;/*这里减去48的原因在于,因为是字符输入
                          所以其ASC吗值不是我想要的,比如,1的是字符时为 
                            49,但是,我想要真正的1,于是就是用ASC码值减去48
                                 得到真正的值*/
    case  1:a[1]=r[0]-48;break;
    case  2:a[2]=10*(r[0]-48)+r[1]-48;break;
    case 3:a[3]=100*(r[0]-48)+10*(r[1]-48)+r[2]-48;break;
    case 4:a[4]=1000*(r[0]-48)+100*(r[1]-48)+10*(r[2]-48)+r[3]-48;break;
    case 5:a[5]=1000*(r[0]-48)+1000*(r[1]-48)+100*(r[2]-48)+10*(r[3]-48)+r[4]-48;break;
    default :A;break; 
    
}
printf("%d\n",a[j]);
if(a[j]==0)/* 这里主要是用来在当==0的时候用一个退格键来屏蔽输出的零,
              主要是因为下面还是一个do while语句,*/
printf("\b");
j=0;/* 是j=0的原因在于对新的整数串,进行新的统计*/
}
while(s[i]!='\0');/* 主要的do while 语句*/
 getch();
}
但是我觉得很是繁琐,虽然结果是正确的 ,但是,老师感觉不对,请各位高时候帮助一下,可以写出新的算法,*/



回复列表 (共2个回复)

沙发

#include<stdio.h>
int main()
{
    char c;
    int i,n=0,sum=0,flag=0,a[100];
    c=getchar();
    while(c!='\n')
    {
        if('0'<=c&&c<='9'){sum=sum*10+c-'0';flag=1;}
        else
            if(flag==1) {a[n++]=sum;flag=0;sum=0;}
        c=getchar();
    }
    if(flag==1)a[n++]=sum;
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    printf("\n");
    return 0;
}

板凳


[code=c]
#include <stdio.h>
int main()
{
    int num[100],i=0;
    do
    {
        if (scanf("%d",num+i)==1)
            printf("%d\n",num[i++]);
    }while (getchar()!='\n');

    return 0;
}
[/code]

最后不是数字的话继续接受输入

我来回复

您尚未登录,请登录后再回复。点此登录或注册