主题:如何修改算法,提高效率
要的效果是,在一串字符串中,把连着的整数存入数组中,然后在输出,
就是说 ,如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();
}
但是我觉得很是繁琐,虽然结果是正确的 ,但是,老师感觉不对,请各位高时候帮助一下,可以写出新的算法,*/
就是说 ,如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();
}
但是我觉得很是繁琐,虽然结果是正确的 ,但是,老师感觉不对,请各位高时候帮助一下,可以写出新的算法,*/