Неправильно Работает Zamena

Тема в разделе "C/C++/C#", создана пользователем chiiif2, 1 июн 2014.

  1. chiiif2

    chiiif2 New Member

    Регистрация:
    1 июн 2014
    Сообщения:
    1
    Симпатии:
    0
    Неправильно работает zamena...задание такое:составить из исходного текста новый,в который войдут строки с нечетным кол-вом символов,в этих строках слова минимальной длины заменить на слово пользователя
    Все работает правильно,кроме сдвига в массиве

    Код (Text):
    #include<iostream>
    #include<conio.h>
    #include<malloc.h>
    using namespace std;
    using std::cout;
    using std::cin;

    int dlin(char*);
    bool proverka(char,char*);
    int godOfF(char*,char*,int,int);
    char* zamena(char*,char*,char*);
    char* clone(char*);
    char* vvod();
    int sword(char*,char*,int);

    int main()
    {

    int j,ks,k;
    char *razd,*slovo;
    char** text1;
    char** text2;
    printf("Vvedite kol_vo strok: " );
    cout<<"\n";
    cin>>k;
    text1=(char**)malloc(k*sizeof(char*));////var arrays
    text2=(char**)malloc(sizeof(char*));

    cout<<"Text\n";
    j=0;
    ks=0;
    while(j<k){
    text1[j]=vvod();
    j++;
    }
    cout<<"Razdeliteli"<<"\n";
    razd=vvod();
    for (j=0;j<k;j++){
    if (godOfF(text1[j],razd,3,0)%2!=0){
    ks++;
    text2=(char**)realloc(text2,ks*sizeof(char*));
    text2[ks-1]=clone(text1[j]);
    }
    }/////////end
    cout<<"slovo"<<"\n";
    slovo=vvod();
    cout<<"Isx text:\n";
    for (j=0;j<k;j++){
    cout<<text1[j]<<"\n";
    free(text1[j]);
    }
    cout<<"Reformed text:\n";
    for(j=0;j<ks;j++){
    text2[j]=zamena(text2[j],slovo,razd);
    cout<<text2[j]<<"\n";
    free(text2[j]);
    }
    getch();
    free(text1);
    free(text2);
    free(slovo);
    free(razd);
    return 0;
    }
    char* vvod(){
    char *str=(char*)malloc(sizeof(char));
    int i=0;
    while((str[i]=_getche())!='\r'){
    i++;
    str=(char*)realloc(str,(i+1)*sizeof(char));
    }
    str[i]='\0';
    cout<<"\n";
    return str;
    }
    char *zamena(char* str,char* word,char* pun){
    int min=godOfF(str,pun,1,0);
    int ind=0;
    int lw=dlin(word)-1;
    int i=0;
    int j=0;
    do{
    ind=godOfF(str,pun,2,ind);
    if(lw<min){
    for(j=0;j<(min-lw);j++){
    i=ind+min-1;
    while (str[i]!='\0'){
    str[i]=str[i+1];
    i++;
    }  
    }
    str=(char*)realloc(str,dlin(str)*sizeof(char));
    }
    if(lw>min){
    str=(char*)realloc(str,(dlin(str)+lw-min)*sizeof(char));
    for(j=0;j<(lw-min);j++){
    i=dlin(str);

    while (i>(ind+min))
    {
    str[i+1]=str[i];
    i--;
    }  
    }
    }
    lw=0;
    i=ind;
    while(word[lw]!='\0'){
    str[i]=word[lw];
    i++;
    lw++;
    }
    }while(godOfF(str,pun,1,ind)==min);
    return str;
    }
    int godOfF(char* str,char* pun,int w,int index){
    int i,lenW,indM,k,min;
    i=index;
    if (index!=0) while((!proverka(str[i],pun)) && (str[i]!='\0')) i++;
    min=dlin(str);
    k=0;
    indM=dlin(str)-1;
    while(str[i] != '\0'){ 
    while(proverka(str[i],pun)) i++;
    if (str[i]=='\0') break;
    k++;
    lenW=0;
    while(!proverka(str[i],pun)&& (str[i]!='\0')){
    i++;
    lenW++;

    }
    if (lenW<min){
    min=lenW;
    indM=i-min;
    }
    }
    if(min==dlin(str)) min=0;
    switch (w){
    case 1: return min;
    case 2: return indM;
    case 3: return k;
    } return 0;
    }
    int dlin(char* pun){
    int k=0;
    while(pun[k] != '\0') k++;
    k++;
    return k;
    }
    bool proverka(char c,char* pun){
    int i;
    bool j;
    j=false;
    for (i=0;i<(dlin(pun)-1);i++) if (c==pun[i]) j=true;
    return j;
    }
    char* clone(char* is){
    int i;
    int a=dlin(is);
    char* str=(char*)malloc(a*sizeof(char));
    for (i=0;i<a;i++) str[i]=is[i];
    return str;
    }
    int sword(char* str,char* pun,int ind){
    int i=ind;
    if ((ind==0)&&(!proverka(str[i],pun))) return 0;

    while((!proverka(str[i],pun)) && (str[i]!='\0')) i++;
    while((proverka(str[i],pun))&&(str[i]!='\0')) i++;
    if (str[i]=='\0') return -1;
    return i;
    }
     

    Вложения:

    • main5.cpp
      Размер файла:
      3,8 КБ
      Просмотров:
      1
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Очень много кода. Выдели проблемный фрагмент в отдельную программу и приведи пример исходных данных, который показывает что этот фрагмент работает неверно.
     
Загрузка...

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