Форум программистов, компьютерный форум CyberForum.ru

Код работает не совсем корректно со строками - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Решение уравнения методом дихотомии, комбинированным методом секущих хорд и методом простых итераций http://www.cyberforum.ru/cpp-beginners/thread1187125.html
Уважаемые участники этого форума, я как увидел этот сайт, сразу принял решения зарегистрироваться так как вижу тут много разбирающихся людей в C++. Помогите мне пожалуйста сделать задания для КУРСОВОЙ. Мне осталось создать программу. Вот тема Тема: Написать программу решения уравнения методом дихотомии, комбинированным методом секущих хорд, методом простых итераций с точностью до 6 знака. Для...
C++ Нажатие клавиш Ребята, перерыл интернет, но так и не понял, как сделать обработку нажатия клавиш с буквами алфавита к примеру этот код у меня работает: while(c != 27){ //завершение программы по нажатию клавиши Esc c = getch(); switch(c){ case 72: sX = 0; sY =-2; sZ = 0; yvelich(sX,sY,sZ, A); break; case 80: sX = 0; sY = 2; sZ = 0; yvelich(sX,sY,sZ, A); break; ... http://www.cyberforum.ru/cpp-beginners/thread1187096.html
C++ Open CV - Работа с контурами
Здравствуйте уважаемые,прошу помочь с алгоритмом.Требуется по имеющимся двум контурам изображения нарисовать линию не совпадения точек контура.С распознаванием проблем нет,что же делать дальше?
Ошибка в указателях C++
Здравствуйте, не понимаю почему выводит мусор. Вроде бы все правильно сделал. Знаю что можно было сделать p = rand(); но меня это не интересует. Скажите, где ошибка? int *p, n = 10; p = new int ; for(int i=0; i<n; i++) {
C++ Подсчитать Количество перестановок при сортировке массива по возрастанию http://www.cyberforum.ru/cpp-beginners/thread1187044.html
Привет всем. Мне нужно написать программу, которая подсчитывает минимальное количество перестановок при сортировке массива по возрастанию. Задача очень легкая. Вот мой код. #include <stdio.h> #include <conio.h> int main() { int n,s=0,i,k,j; scanf("%d",&n); int *a = new int;
C++ Перегрузка префиксного инкремента Как перегрузить префиксальный инкремент? class Horse{ private: int x,y; public: Horse(void); void setX(int); void setY(int); подробнее

Показать сообщение отдельно
Anastezia
0 / 0 / 0
Регистрация: 26.03.2014
Сообщений: 14
01.06.2014, 14:39  [ТС]     Код работает не совсем корректно со строками
В общем с вводом все ок,теперь не хочет работать killer
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include<iostream>
#include<conio.h>
#include<malloc.h>
using namespace std;
 
 
int len(char*);
bool isPun(char,char*);
int godOfF(char*,char*,int,int);
char* killer(char*,char*,char*);
char* clone(char*);
char* read();
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*));
    razd=(char*)malloc(sizeof(char));
    slovo=(char*)malloc(sizeof(char));
    cout<<"Davay epta"<<"\n";
    razd=read();
    cout<<"Text\n";
    j=0;
    ks=0;
    while(j<k){
               text1[j]=read();
               j++;
     }
    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=read();
    for (j=0;j<k;j++) cout<<text1[j]<<"\n";
    cout<<"Reformed text:\n";
    for(j=0;j<ks;j++){
        text2[j]=killer(text2[j],slovo,razd);
        cout<<text2[j]<<"\n";
    }
 
    getch();
       for (j=0;j<k;j++) free(text1[j]);
       free(text1);
       for (j=0;j<ks;j++) free(text2[j]);
       free(text2);
       free(razd); 
    return 0;
}
char* read(){
    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 *killer(char* str,char* word,char* pun){
    int min=godOfF(str,pun,1,0);
    int ind=0;
    int lw=len(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;
                while (str[i]!='\0'){
                    str[i]=str[i+1];
                    i++;
                }   
            }
            str=(char*)realloc(str,len(str)*sizeof(char));
        }
        if(lw>min){
            str=(char*)realloc(str,(len(str)+lw-min)*sizeof(char));
            for(j=0;j<(lw-min);j++){
                i=len(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++;
        }
      cout<<ind<<"\n";
    }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((!isPun(str[i],pun)) && (str[i]!='\0')) i++;
     min=0;
     k=0;
     indM=len(str)-1;
         while(str[i] != '\0'){         
            while(isPun(str[i],pun)) i++;          
            if (str[i]=='\0') break;
            k++;
            lenW=0;
            while(!isPun(str[i],pun)&& (str[i]!='\0')){
               i++;
               lenW++;
               
            }
            if ((lenW<min)&(min>0)){ 
               min=lenW;
               indM=i-min;
               }                                         
     }
     switch (w){
            case 1: return min;    
            case 2: return indM; 
            case 3: return k; 
     } return 0 ;   
}
int len(char* pun){
     int k=0;     
     while(pun[k] != '\0') k++;
     k++; 
     return k;
}
bool isPun(char c,char* pun){
     int i;
     bool j;
     j=false;
      for (i=0;i<(len(pun)-1);i++) if (c==pun[i]) j=true;
      return j;
}
char* clone(char* is){
     int i; 
     int a=len(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)&&(!isPun(str[i],pun))) return 0;
 
    while((!isPun(str[i],pun)) && (str[i]!='\0')) i++;
    while((isPun(str[i],pun))&&(str[i]!='\0')) i++;
    if (str[i]=='\0') return -1;
    return i;
}
Добавлено через 3 часа 33 минуты
задание такое:составить из исходного текста новый,в который войдут строки с нечетным кол-вом символов,в этих строках слова минимальной длины заменить на слово пользователя
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru