Задача: Файловый ввод/вывод, Строки, разные методы сортировки строк

Тема в разделе "C/C++/C#", создана пользователем Nstudent, 1 дек 2010.

Статус темы:
Закрыта.
  1. Nstudent

    Nstudent Гость

    помогите найти ошибку
    само задание-два массива строк, каждый из них чортируется методом пузырька, а затем оба в один-слиянием.
    #include<iostream>
    #include<string.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    typedef char *pChar;
    typedef char **ppChar;

    FILE*out1,*out2,*out3;
    void main()
    {out1=fopen("text1.txt","r");
    out2=fopen("text2.txt","r");
    out3=fopen("text3.txt","w");
    int i,j,m,n,kolstrA,kolstrB;
    char in[80];
    char an[80];
    char*pa[100];
    char*pb[100];
    char*pc[100];
    char*pk[100];
    char a[100][80];
    char b[100][80];
    char c[200][80];


    for (kolstrA=0;kolstrA<100;kolstrA++)
    {if(fgets(in,80,out1)==NULL)
    {break;};
    in[80]='\0';
    strncpy(a[kolstrA],in,80);};
    fclose(out1);
    for(kolstrB=0;kolstrB<100;kolstrB++)
    {if(fgets(an,80,out2)==NULL)
    {break;};
    an[80]='\0';
    strncpy(b[kolstrB],an,80);};
    fclose(out2);

    for(i=0;i<=kolstrA;i++)
    {pa=a;};
    for(j=0;j<=kolstrB;j++)
    {pb[j]=b[j];};
    for(m=0;m<=(kolstrA+kolstrB);m++)
    {pc[m]=c[m];};
    i=0;
    j=0;
    m=0;
    for(i=0;i<=kolstrA-2;i++)
    for(j=i+1;j<=kolstrA-1;j++)
    {if(strcmp(pa,pa[j])<0)
    {strcpy(pk,pa);
    strcpy(pa,pa[j]);
    strcpy(pa[j],pk);};};
    for(i=0;i<=kolstrB-2;i++)
    for(j=i+1;j<=kolstrB-1;j++)
    {if(strcmp(pb,pb[j])<0)
    {strcpy(pk,pb);
    strcpy(pb,pb[j]);
    strcpy(pb[j],pk);};};
    do
    {if(strcmp(pa,pb[j])<0)
    {pc[m]=pa;
    i=i+1;
    m=m+1;}
    else
    {pc[m]=pb[j];
    j=j+1;
    m=m+1;};}
    while(i<kolstrA||j<kolstrB);
    while(j<=kolstrB)
    {pc[m]=pb[j];
    j=j+1;
    m=m+1;};
    while(i<=kolstrA)
    {pc[m]=pa;
    i=i+1;
    m=m+1;};
    cout<<"rezultat"<<"\n";
    for(m=0;m<(kolstrA+kolstrB);m++)
    {printf("%s\n",pc[m]);};
    return;
    }
    выводит:
    error C2664: strcpy: невозможно преобразовать параметр 2 из 'char *[100]' в 'const char *'
    Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Объясните пожалуйста вот этот момент?
    Это зачем?

    Добавлено:
    Я в алгоритм не вникал, просто все ошибки которые ярко бросились в глаза я вам прокомментировал
    Код (C++):
    #include<iostream>
    #include<string.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    //typedef char *pChar;
    //typedef char **ppChar;

    //Код читать очень-очень сложно
    FILE*out1,*out2,*out3;
    void main()
    {
    out1=fopen("text1.txt","r");
    out2=fopen("text2.txt","r");
    out3=fopen("text3.txt","w");
    int i,j,m,n,kolstrA,kolstrB;
    char in[80];
    char an[80];
    char*pa[100];
    char*pb[100];
    char*pc[100];
    char*pk[100];
    char a[100][80];
    char b[100][80];
    char c[200][80];

    for (kolstrA=0;kolstrA<100;kolstrA++)
    {
    if(fgets(in,80,out1)==NULL)
    {
    break;
    };
    in[80]='\0';
    strncpy(a[kolstrA],in,80);
    };
    fclose(out1);
    for(kolstrB=0;kolstrB<100;kolstrB++)
    {
    if(fgets(an,80,out2)==NULL)
    {
    break;
    };
    an[80]='\0';
    strncpy(b[kolstrB],an,80);};
    fclose(out2);

    for(i=0;i<=kolstrA;i++)
    {
    pa[i]=a[i];
    };
    for(j=0;j<=kolstrB;j++)
    {
    pb[j]=b[j];
    };
    for(m=0;m<=(kolstrA+kolstrB);m++)
    {
    pc[m]=c[m];
    };
    i=0;
    j=0;
    m=0;
    for(i=0;i<=kolstrA-2;i++)
    {
    for(j=i+1;j<=kolstrA-1;j++)
    {
    if(strcmp(pa[i],pa[j])<0)
    {
    strcpy(pk,pa[i]); // Вот смотрите в этом месте у вас pk определена как массив строк(указатель на массив указателей)
    // иными словами как char** prk; А strcpy - не работает с массивом строк, а только с массивом символов char*
    //Так что добавьте индекс pk[i]
    strcpy(pa[i],pa[j]);
    strcpy(pa[j],pk);};}; //Тут та же история
    for(i=0;i<=kolstrB-2;i++)
    {
    for(j=i+1;j<=kolstrB-1;j++)
    {
    if(strcmp(pb[i],pb[j])<0)
    {
    strcpy(pk,pb[i]); // И тут таже история
    strcpy(pb[i],pb[j]);
    strcpy(pb[j],pk); //И тут
    };
    };
    do
    {
    if(strcmp(pa[i],pb[j])<0)
    {
    pc[m]=pa[i];
    i=i+1;
    m=m+1;
    }
    else
    {
    pc[m]=pb[j];
    j=j+1;
    m=m+1;
    };
    }
    while(i<kolstrA||j<kolstrB); //В этом месте совершенно не понял что вы этим хотели сказать
    while(j<=kolstrB)
    {
    pc[m]=pb[j];
    j=j+1;
    m=m+1;
    };
    while(i<=kolstrA)
    {
    pc[m]=pa[i];
    i=i+1;
    m=m+1;
    };
    cout<<"rezultat"<<"\n";
    for(m=0;m<(kolstrA+kolstrB);m++)
    {
    printf("%s\n",pc[m]);
    };
    return;
    }
    }
    }
     
  3. Nstudent

    Nstudent Гость

    с pk сразу выдает ошибку о преобразовании типов. я попробовала заменить так:
    char pk[80];
    и
    {strcpy(pk,pa);
    strcpy(pa,pa[j]);
    strcpy(pa[j],pk);}

    теперь компилятор ошибок не выдает, но при запуске выводятся некие непонятные символы(вроде скобок)
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Скажи что именно делает (или должна делать), твоя программа, так будет легче о чем то конкретном говорить :)
     
  5. Nstudent

    Nstudent Гость

    Она должна 1)считать строки двух текстовых файлов 2) в обоих файлах отсортировать строки методом пузырька 3) из эти двух файлов создать третий, отсортировав строки слиянием. Ну и обязательно должны использоваться указатели.
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Up-Темы
    2 Nstudent : Актуальность темы еще имеется?
     
Загрузка...
Похожие Темы - Задача Файловый ввод
  1. Янчик
    Ответов:
    0
    Просмотров:
    472
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    778
  3. elzim
    Ответов:
    0
    Просмотров:
    929
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.114
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.102
Статус темы:
Закрыта.

Поделиться этой страницей