→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Работает неправильно С/С++ 
Автор Сообщение
Начинающий

Регистрация: 01.06.2014
Сообщения: 1

Репутация: 0 [ ? ]
Сообщение Работает неправильно С/С++
Подскажите пожалуйста,где косяк...задание такое:составить из исходного текста новый,в который войдут строки с нечетным кол-вом символов,в этих строках слова минимальной длины заменить на слово пользователя
Все работает правильно,кроме сдвига в массиве


#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;
}
[what]


01.06.2014 18:39
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»