有没有哪位大哥帮我一下!!快要被搞死了!!!
拜托了{:10_286:}/*-------------------------------------------------------------------------
【程序设计】
---------------------------------------------------------------------------
题目:主函数main()中的字符数组s为测试数据,程序首先取出字符数组s中的连续数
字字符子串,构成若干个整数,保存到t数组中,然后找出数组中的所有素数,
并将素数顺序存放到数组的后部。
编写程序:
1.编写int abstract(char s[],int t[])函数。取出字符数组s中的连续数
字字符子串,构成若干个整数,保存到数组t中。函数返回整数个数。
2.编写函数void move( int t[], int n),找到t数组中的所有素数,并将
该数组中的所有素数顺序移到数组的后面,素数间的相对位置不变。
例如:字符数组s中的数据为"yu11asd18**6$abc3jui17t*r33t10?qwe31nm19jj21da"
则数组t中元素为:111863173310311921
程序运行结果:186331021113173119
--------------------------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
-------------------------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
int abstract(char s[],int t[])
{
/**********Program**********/
int i,j=0,sum=0;
for(i=0; s; i++)
{
if(isdigit(s))
{
sum=0;
while(isdigit(s))
sum=sum*10+s-'0';
}
if(sum)
{
t=sum;
sum=0;
}
}
return j;
/**********End**********/
}
void move( int t[], int n)
{
/**********Program**********/
/**********End**********/
}
int main()
{
char s[]={"yu11asd18**6$abc3jui17t*r33t10?qwe31nm19jj21da"};
int t,i,n;
FILE *fp;
if((fp=fopen("data.dat","w"))==NULL)
{
printf("File open error\n");
exit(0);
}
n=abstract(s,t);
move(t,n);
for(i=0;i<n;i++)
{
printf("%d",t);
fprintf(fp,"%d",t);
}
fclose(fp);
return 0;
} 没人吗??{:10_266:}{:10_266:} 你好,代码的思路都在注释里了,有什么不懂的地方可以回复哦~
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
int abstract(char s[],int t[])
{
/**********Program**********/
int i,j=0,k=0,m=1,sum=0,cnt=0;
for(i=0; s; i++)
{
char h={0};
if(s>='0'&&s<='9')j=i;//j为定位用,定位到第一个数字出现的位置。
while(s>='0'&&s<='9')
{
h=s; //从j位置开始找,找到不是数字的字符位置,这之间所有的数字赋值到另一个字符串中
}
h=0;
if(h){
t=atoi(h); //把这个字符串转换为数字(也可以用循环转换,这里为方便使用了函数)
i=j; //我们把i定位到数字最后一位的后一位,没有这句话,例如扫到了11,会把后边的1也扫进去。
}
k=0; //用来存储新的数字
}
return cnt;
/**********End**********/
}
void move( int t[], int n)
{
/**********Program**********/
int i=0,j=0,k,flag=1,m=n;
for(i=0;i<n;i++)
{
//判断素数的算法
flag=1;
for(j=2;j<=sqrt(t);j++)
{
if(t%j==0)
flag=0;
}
//解释下为什么下面用m,我的意思是把这个素数后面的都往左挪,那么肯定要从这个素数的位置扫到最后一位。
//n--的原因是后边已经移动完的素数就不用再移动了。就是从0-n开始扫。没有这句话会重复扫已经扫过的素数,已经排好的素数就乱了顺序。
//总结:n是检测素数用,m是移动素数用。
if(flag)
{
int temp=t;
for(k=i;k<m-1;k++)
{
t=t;
}
t=temp;
i=0;n--;
}
}
/**********End**********/
}
int main()
{
char s[]={"yu11asd18**6$abc3jui17t*r33t10?qwe31nm19jj21da"};
int t,i,n;
FILE *fp;
if((fp=fopen("data.dat","w"))==NULL)
{
printf("File open error\n");
exit(0);
}
n=abstract(s,t);
move(t,n);
for(i=0;i<n;i++)
{
printf("%d",t);
fprintf(fp,"%d",t);//这里有改动,t是个数组,循环要输出t而不是t。
}
fclose(fp);
return 0;
}
boqianlv 发表于 2019-1-10 16:41
你好,代码的思路都在注释里了,有什么不懂的地方可以回复哦~
看懂了,我想了一个小时,就是没有把第二个函数写出来{:10_303:} 我是个汉子 发表于 2019-1-9 19:23
没人吗??
t=atoi(h);
这个是将atoi中的所有字符都给t吗?
如:atoi[]={"52"},将52转换成整型再赋值给t吗? 我是个汉子 发表于 2019-1-10 18:25
t=atoi(h);
这个是将atoi中的所有字符都给t吗?
如:atoi[]={"52"},将52转换成整型再赋值给t ...
是的,不过,应该写成(atoi("52");)
另外,你第一个函数有个问题
应该是for(i=0;s;i++),s是数组的首地址,肯定不为0,就成了死循环。 boqianlv 发表于 2019-1-10 19:01
是的,不过,应该写成(atoi("52");)
另外,你第一个函数有个问题
应该是for(i=0;s;i++),s是数组的首 ...
哈哈,尴尬!
页:
[1]