我是个汉子 发表于 2019-1-9 19:08:22

有没有哪位大哥帮我一下!!快要被搞死了!!!

拜托了{: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;
}

我是个汉子 发表于 2019-1-9 19:23:13

没人吗??{:10_266:}{:10_266:}

boqianlv 发表于 2019-1-10 16:41:09

你好,代码的思路都在注释里了,有什么不懂的地方可以回复哦~
#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;
}

我是个汉子 发表于 2019-1-10 18:03:53

boqianlv 发表于 2019-1-10 16:41
你好,代码的思路都在注释里了,有什么不懂的地方可以回复哦~

看懂了,我想了一个小时,就是没有把第二个函数写出来{:10_303:}

我是个汉子 发表于 2019-1-10 18:25:34

我是个汉子 发表于 2019-1-9 19:23
没人吗??

t=atoi(h);
这个是将atoi中的所有字符都给t吗?
如:atoi[]={"52"},将52转换成整型再赋值给t吗?

boqianlv 发表于 2019-1-10 19:01:40

我是个汉子 发表于 2019-1-10 18:25
t=atoi(h);
这个是将atoi中的所有字符都给t吗?
如:atoi[]={"52"},将52转换成整型再赋值给t ...

是的,不过,应该写成(atoi("52");)
另外,你第一个函数有个问题
应该是for(i=0;s;i++),s是数组的首地址,肯定不为0,就成了死循环。

我是个汉子 发表于 2019-1-10 19:47:49

boqianlv 发表于 2019-1-10 19:01
是的,不过,应该写成(atoi("52");)
另外,你第一个函数有个问题
应该是for(i=0;s;i++),s是数组的首 ...

哈哈,尴尬!
页: [1]
查看完整版本: 有没有哪位大哥帮我一下!!快要被搞死了!!!