سلام میشه اشکال این کد رو بگید؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سلام میشه اشکال این کد رو بگید؟

0 امتیاز

سوال میخواد که دو تا جمله از ورودی بگیره که به نقطه ختم میشن، کلماتی که توی هر دو جمله هستن رو چاپ کنه، در انتها هم کلمات دو جمله رو ادغام کنه بطوری که هیچ کلمه تکراری توش نباشه و کلمات به ترتیب صعودی باشن، مثلا اول کلمه ای که اولش a داره بیاد و بعدش کلمه ای که اولش b داره.
این هم کدم:
 

#include <iostream>
using namespace std;
void get(char a[]);
void repeat(char a[],char b[]);
int count(char a[],int i);
void arrange(char a[]);
void add(char a[],int b);
int len(char a[]);
void sort(char a[],int m,int n,int i,int j);
//void merge(char a[],char b[],char c[]);
int main()
{
    char a[30]={'\0'};
    char b[30]={'\0'};
    char c[40]={'\0'};
    get(a);
    get(b);
    repeat(a,b);
    arrange(a);
    arrange(b);
  /*  merge(a,b,c);
    for(int i=0;c[i]!='.';i++)
        cout<<c[i];*/

    return 0;
}
void get (char a[])
{
    char c=cin.get();
    for(int i=0;c!='\n';i++)
    {
        a[i]=c;
        c=cin.get();
    }

}
void repeat(char a[],char b[])
{
    int k;
    for(int i=0,j=0;a[i]!='.'&&b[j]!='.';i++,j++)
    {
        int m;
        int n;
        int q;
       m=count(a,i);
       n=count(b,j);
        for(q=i,n=0;b[q]!=' '&&b[q]!='.';q++,n++);

        if(m==n)
        {
            int s=i;
            int r=j;
            int flag=0;
            for(int p=0;p<m&&flag==0;p++,r++,s++)
            {
                if(a[s]!=b[r])
                {
                    flag=1;
                }
            }
            if(flag==1)
            {
                int k;
                for(k=i;a[k]!='.'&&a[k]!=' ';k++);
                i=k;
                for(k=j;b[k]!='.'&&b[k]!=' ';k++);
                j=k;
            }
            if(flag==0)
            {
                int k;
                for(k=i;a[k]!=' '&&a[k]!='.';k++)
                {
                  cout<<a[k];
                  a[k]='\0';
                }
                cout<<endl;
                for(k=i;a[k]!='.'&&a[k]!=' ';k++);
                i=k;
                for(k=j;b[k]!='.'&&b[k]!=' ';k++);
                j=k;

            }
        }
    }
}
int count(char a[],int i)
{
    int m,k;
    for(k=i,m=0;a[k]!=' '&&a[k]!='.'&&a[k]!='\0';k++,m++);
    return m;
}

void arrange(char a[])
{
  for(int i=0;a[i]!='.';i++)
  {
      int m=count(a,i);
      if(a[i+m]!='.')
      {
          int i,j;
          for(j=i+m;a[j]==' '||a[j]=='\0';j++);
          int y=j;
          int x=i;
          int n=count(a,y);
          if(a[x]>a[y])
          {
             if(m==n)
             {
                for(int u=x,v=y;a[v]!=' '&&a[v]!='.'&&a[v]!='\0';u++,v++)
                {
                  int temp=a[v];
                  a[v]=a[y];
                  a[y]=temp;
                }
             }
             else if(m>n)
             {
                 sort(a,n,m,y,x);
             }
             else if(m<n)
             {
                  sort(a,m,n,x,y);
             }
          }
          if(a[x]==a[y])
          {
             int flag=0;
             int xx=x;
             int yy=y;
             for(;((a[xx]!='.'&&a[xx]!=' '&&a[xx]!='\0')||(a[yy]!='.'&&a[yy]!=' '&&a[yy]!='\0'))&&flag==0;yy++,xx++)
             {
                 if(a[yy]!=a[xx])
                 {
                     if(a[yy]<a[xx])
                         flag=2;
                     if(a[yy]>a[xx])
                         flag=1;
                 }
             }
             if(flag==2)
             {
                 if(m==n)
                 {
                    for(int u=x,v=y;a[v]!=' '&&a[v]!='.'&&a[v]!='\0';u++,v++)
                    {
                      int temp=a[v];
                      a[v]=a[y];
                      a[y]=temp;
                    }
                 }
                 else if(m>n)
                 {
                     sort(a,n,m,y,x);
                 }
                 else if(m<n)
                 {
                      sort(a,m,n,x,y);
                 }
             }
             else if(flag==0)
             {
               if(m==n)
               {
                 for(int b=x;a[b]!='.'&&a[b]!=' '&&a[b]!='\0';b++)
                     a[b]='\0';
               }
               else if(m>n)
               {
                 sort(a,n,m,y,x);
               }
               else if(m<n)
               {
                 sort(a,m,n,x,y);
               }
                 
             }
          }
      }
      int s;
      for(s=i+m;a[s]==' '||a[s]=='\0';s++);
      i=s-1;
  }
}
void add(char a[],int b)
{
    int m=len(a);
    int i;
    for(i=m;i>b-1;i--)
    {
        a[i]=a[i-1];
    }
    a[i]={'\0'};
}
int len(char a[])
{
    int i;
    for(i=0;a[i]!='.';i++);
    return i;
}
void sort(char a[],int m,int n,int i,int j)
{
    //m=max
    //n=min
    int p=m;
    int q=n;
    for(;a[p]!=' '&&a[p]!='.'&&a[p]!='\0';p++,q++)
    {
            int temp=a[p];
                a[p]=a[q];
                a[q]=temp;
    }
    q--;
    if(a[p]!='.' )
    {
      for(;a[q]!=' '&&a[q]!='.'&&a[q]!='\0';q++,p++)
      {
        int h=p+1;
        add(a,h);
        a[p]=a[q+1];
        a[q+1]='\0';
      }
      a[p]=' ';
    }
    else
    {
      for(;a[q]!=' '&&a[q]!='.'&&a[q]!='\0';q++,p++)
      {
        int h=p+1;
        add(a,h);
        a[p]=a[q];
        a[q+1]='\0';
      }
      a[p]='.';
    }
    

}/*
void merge(char a[],char b[],char c[])
{
    int k=0,m,n;
  for(int i=0,j=0,k;a[i]!='.'&&b[j]!='.';i++,j++,k++)
  {

      if(a[i]>b[j])
      {
          for(int m=j;b[m]!='.'&&b[m]!=' '&&b[m]!='\0';m++)
          {
            c[k]=b[m];
            k++;
          }
          for(int n=m;b[n]=='.'||b[n]==' '||b[n]=='\0';n++);
          j=n-1;
      }
      else if(a[i]<b[j])
      {
        for(int m=i;a[m]!='.'&&a[m]!=' '&&a[m]!='\0';m++)
        {
            c[k]=a[m];
            k++;
        }
        for(int n=m;a[n]=='.'||a[n]==' '||a[n]=='\0';n++);
        i=n-1;
      }
      else if(a[i]==b[j])
      {
          int ii=i;
          int jj=j;
          int flag=0;
          for(int f=ii,g=jj;(a[f]!='.'&&a[f]!=' '&&a[f]!='\0')&&(b[g]!='.'&&b[g]!=' '&&b[g]!='\0')&flag==0;f++,g++)
          {
              if(a[f]>a[g])
                  flag=1;
              else if(a[f]<a[g])
                  flag=2;
          }
          if(flag==2)
          {
              int m,n;
              for(m=i;a[m]!='.'&&a[m]!=' '&&a[m]!='\0';m++)
              {
                  c[k]=a[m];
                  k++;
              }
              for(n=m;a[n]=='.'||a[n]==' '||a[n]=='\0';n++);
              i=n-1;
          }
          else if(flag==1)  //a[f]>b[g]
          {

              for(m=j;b[m]!='.' && b[m]!=' ' && b[m]!='\0';m++)
              {
                  c[k]=b[m];
                  k++;
              }
              for(n=m;b[n]=='.'||b[n]==' '||b[n]=='\0';n++);
              j=n-1;
          }
          c[k]=' ';
      }
  }
  c[k]='.';
}
*/

 

سوال شده خرداد 1, 1399  بوسیله ی Krymin (امتیاز 9)   1 2
ویرایش شده خرداد 1, 1399 بوسیله ی مصطفی ساتکی

1 پاسخ

0 امتیاز

سلام؛ کدتون از خوانایی کمی برخوردار هست و سخته و وقت‌گیره خطایابیش هرچند که مشکل کوچیکی باشه. برای اینکه راحت‌تر بتونید پیش‌برید و با مشکلات کم‌تری مسئله رو حل کنید پیشنهاد می‌کنم که :

  • از std::string به جای []char استفاده کنید، که به شما قابلیّت‌های خیلی بهتری برای دستکاری رشته رو میده:

https://en.cppreference.com/w/cpp/string/basic_string

  • از توابع هدرفایل Algorithm استفاده کنید مثلاً برای مرتب‌سازی :

https://en.cppreference.com/w/cpp/algorithm

 

پاسخ داده شده خرداد 2, 1399 بوسیله ی mg_ramezani (امتیاز 727)   1 1 12
...