Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Массивы


Автор: blooddss 1.6.2011, 10:50
Задача:Функция находит в строке фрагменты, содержащие последовательность одинаковых символов длиной более 3 и возвращает динамичесмкий массив указателей на такие фрагменты
Проблемма состоит в том что компилируеться,но ничего не выводит,подскажите пожалуйста что не так..
Код


Код

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
#include <alloc.h> 
  
  
void func (char *str) 
{ 
int i, n, k; 
for (i = 0; str[i] != '\0'; i++) 
{ 
if (str[i] == str[i++] == str[i+2]) 
{ 
for (int j = i+2; str[j] == str[j++]; j++) 
{ 
n = j++; 
} 
float *arr = (float *) malloc (n*sizeof (float )); 
for (k=0, i; k < n; k++, i++) 
{ 
arr[k] = str[i]; 
} 
float **parr = (float **) malloc (n* sizeof (float *)); 
for (k = 0; k < n; k++) 
{ 
parr [k] = & arr [k]; 
} 
for (k=0; k<n; k++) 
{ 
printf ("%f", parr [k]); 
} 
} 
} 
} 
  
  
void main() 
{ 
clrscr(); 
float **parr; 
printf ("Данная пррограмма находит в строке 3 повторяющихся символа и выводит динамический массив указателей на такой участок строки\n\n"); 
char arr[30]; 
printf ("Введите строку\n"); 
gets (arr); 
func (arr); 
  
getch(); 
free (parr); 
}  


Автор: bsa 1.6.2011, 10:54
blooddss, оформлять код тебя не учили?

Совсем ничего не выводит? Даже "Введите строку"?

кстати, "void main()" это не правильно, надо писать "int main()".

Автор: xvr 1.6.2011, 16:05
Цитата(blooddss @  1.6.2011,  10:50 Найти цитируемый пост)
if (str[i] == str[i++] == str[i+2])

Прелестная конструкция  smile Мало того, что она делает не то, что ожидалось, она еще это делает не детерминированным способом  smile 

Автор: porshegt3 10.6.2011, 15:44
для начала оформи верно, потом можно рассмотреть твой код.

Автор: borisbn 11.6.2011, 03:22
>if (str[i] == str[i++] == str[i+2]) {
Результат первого сравнения всегда true. Дальше str[i+2] сравнивается с ним. Считаешь это правильным? 
> for (int j = i+2; str[j] == str[j++]; j
++)
str[j] всегда равно str[j++], т.к. ++ отработает после сравнения. Нужно str[j+1]

Автор: bsa 13.6.2011, 18:52
Цитата(borisbn @  11.6.2011,  03:22 Найти цитируемый пост)
str[j] всегда равно str[j++], т.к. ++ отработает после сравнения.

А вот и неверно. Это типичное UB.

Автор: borisbn 13.6.2011, 19:20
Цитата(bsa @  13.6.2011,  18:52 Найти цитируемый пост)
А вот и неверно. Это типичное UB.

в принципе, конечно UB, но... мы ж не в сферическом вакууме  smile 
http://liveworkspace.org/code/f269cf8d97cfc09f1bf2aaeb2c0489fc

Автор: mes 13.6.2011, 19:22
Цитата(borisbn @  13.6.2011,  18:20 Найти цитируемый пост)
но... мы ж не в сферическом вакууме   

нда...

Автор: bsa 13.6.2011, 19:24
Цитата(borisbn @  13.6.2011,  19:20 Найти цитируемый пост)
в принципе, конечно UB, но... мы ж не в сферическом вакууме

да. сегодня один результат, завтра другой, после завтра третий. Оно надо? Мне нет. Проще написать j+1 и спать спокойно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)