Форум программистов, компьютерный форум, киберфорум
Наши страницы
furetun
Войти
Регистрация
Восстановить пароль
Оценить эту запись

12 Дана строка символов. Слова в строке отделяются одним пробелом. Поменять местами самое длинное и самое короткое слов.

Запись от furetun размещена 12.12.2018 в 16:01

Пишет, что используется потенциально неинициализированная локальная переменная-указатель e1, e2, p1, p2


#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>

char* swap_min_max(char* s);

int main(void) {
int proverka;
setlocale(LC_ALL, "Rus");
char *mystr;
mystr = malloc( sizeof(char) * 1536 );

printf("введите предложение, пожалуйста.\n");
gets(mystr);
swap_min_max(mystr);
puts(mystr);

free(mystr);
return 0;


}

char* swap_min_max(char* s){
int n1 = 0, n2 = 0, k = 0;
char *p1, *p2, *e1, *e2;
char *t, c, *p = s;

//поиск мин/макс слова
do {
if(*p && !(*p==' ' || *p=='.' || *p==',' || *p=='!' || *p=='?'))
++k;
else if(k > 0){
if((k < n1) || !n1){
n1 = k;
p1 = p - k;
e1 = p;
}

if(k > n2){
n2 = k;
p2 = p - k;
e2 = p;
}
k = 0;
}

} while(*p++ != '\0');

if(p1 > p2){
t = p1, p1 = p2, p2 = t;
t = e1, e1 = e2, e2 = t;
}

for(; p2!=e2; p2++){
for(p = p2; p > p1; p--){
c = *p;
*p = *(p - 1);
*(p - 1) = c;
}
p1++;
e1++;
}

for(--e2; p1 != e1; --e1){
for(p = p1; p < e2; ++p){
c = *p;
*p = *(p + 1);
*(p + 1) = c;
}
}
return s;
}
Размещено в Без категории
Просмотров 238 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru