Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2009, 19:53   #1
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию Обработка символьных данных и текстовых файлов

В заданной строке найти самое короткое и самое длинное слово.
warning C4018: '==' : signed/unsigned mismatch это ошибка!! ничего не могу понять.. программа же работала!
Код:
#include <stdio.h>
#include <string.h>

main(){
 char stroka[255];
 
 FILE *text_;
 if((text_=fopen("text.txt", "r"))==NULL)  // Otkritie texta dlia raboti
  {
   printf("ERROR!!!");
   return 0;
  }
char simvol;
for(int i=0; (simvol=getc(text_))!=EOF; i++)
stroka[i]=simvol;
fclose(text_);

printf("Ishodnia stroka:\n%s\n%d", stroka, strlen(stroka));

/* sam algoritm nahogdenia*/
int maxStart, minStart, maxLen=0, minLen=strlen(stroka)-1,len=0;
for(int i=0; i<strlen(stroka); i++){
   if(stroka[i]!=' ' && i<strlen(stroka)-1){
      len++;
   }else{
         if(i==strlen(stroka)-1){len++;i++;}
         if(len>maxLen){maxLen=len; maxStart = i-maxLen;}
         if(len<minLen){minLen=len; minStart = i-minLen;}
         len=0;
   }
}

printf("\nSlovo maximal'noi dlini:\n");
for(i=maxStart; i<maxStart+maxLen; i++)
printf("%c", stroka[i]);
printf("\nDlina slova = %d", maxLen);

printf("\n\nSlovo minimal'noe dlini:\n");
for(i=minStart; i<minStart+minLen; i++)
printf("%c", stroka[i]);
printf("\nDlina slova = %d", minLen);
 
int pause;
scanf("%d", &pause);
 
 return 0;
}
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Старый 10.06.2009, 20:01   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

У вас i в последних двух циклах не объявлена.
Цитата:
warning C4018: '==' : signed/unsigned mismatch
А вот такого у меня нет. Где возникает?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.06.2009, 20:07   #3
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию

При компилировании..
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Старый 10.06.2009, 20:11   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Skrip
При компилировании..
Очень информативно. И как, по-вашему, я пойму в чем ошибка?

На какой строчке она возникает? После добавления объявления переменной i по-прежнему ошибка?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.06.2009, 20:21   #5
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию

Код:
#include <stdio.h>
#include <string.h>

main(){
 char stroka[255];
 
 FILE *text_;
 if((text_=fopen("text.txt", "r"))==NULL)  // Otkritie texta dlia raboti
  {
   printf("ERROR!!!");
   return 0;
  }
char simvol;
for(int i=0; (simvol=getc(text_))!=EOF; i++)
stroka[i]=simvol;
fclose(text_);

printf("Ishodnia stroka:\n%s\n%d", stroka, strlen(stroka));

/* sam algoritm nahogdenia*/
int maxStart, minStart, maxLen=0, minLen=strlen(stroka)-1,len=0;
for(int i=0; i<strlen(stroka); i++){
   if(stroka[i]!=' ' && i<strlen(stroka)-1){
      len++;
   }else{
         if(i==strlen(stroka)-1){len++;i++;}
         if(len>maxLen){maxLen=len; maxStart = i-maxLen;}
         if(len<minLen){minLen=len; minStart = i-minLen;}
         len=0;
   }
}

printf("\nSlovo maximal'noi dlini:\n");
for(int i=maxStart; i<maxStart+maxLen; i++)
printf("%c", stroka[i]);
printf("\nDlina slova = %d", maxLen);

printf("\n\nSlovo minimal'noe dlini:\n");
for(int i=minStart; i<minStart+minLen; i++)
printf("%c", stroka[i]);
printf("\nDlina slova = %d", minLen);
 
int pause;
scanf("%d", &pause);
 
 return 0;
}
при объявлении i возникает 3 ошибки..(
error C2374: 'i' : redefinition; multiple initialization

for(int i=0; (simvol=getc(text_))!=EOF; i++)
see declaration of 'i'
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Старый 10.06.2009, 20:24   #6
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию

Без добавления:

if(i==strlen(stroka)-1){len++;i++;}
warning C4018: '==' : signed/unsigned mismatch

if(stroka[i]!=' ' && i<strlen(stroka)-1){
warning C4018: '<' : signed/unsigned mismatch

for(int i=0; i<strlen(stroka); i++){
warning C4018: '<' : signed/unsigned mismatch
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Старый 10.06.2009, 20:29   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что за компилятор? У меня все компилится и работает.
Никаких множественных объявлений тут нет. А если компилятор их видит (как в вашем случае), то пора подумать о его смене.

Попробуйте объявить i в начале программы и убрать объявления из других мест. И объявите i как unsigned int.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.06.2009, 20:37   #8
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию

Вообще программу писала на dev C++, а мне надо на Microsoft Visual C++. Здесь у меня только Microsoft Visual C++, я не думала, что они чем-то отличаются.. и защищать ее на Visual C++ %)
Я спокойный, вежливый и уравновешенный человек

Последний раз редактировалось Skrip; 10.06.2009 в 20:39.
Skrip вне форума Ответить с цитированием
Старый 10.06.2009, 20:40   #9
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2Skrip visual c++ 6? он не поддерживает современный стандарт с++. в более старом варианте не разрешалось инициализировать переменные в описании цикла. перенесите ее выше, но аккуратно, проверив остальной код, так или иначе зависимый от этой переменной

пс. ну или используйте visual c++ >=7.1
vvviperrr вне форума Ответить с цитированием
Старый 10.06.2009, 20:44   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В Dev-C++ все компилится без проблем.
Сейчас запустил в студии. Перед main укажите тип (int).
Во втором цикле, как я и сказал, тип i измените на unsigned int.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка текстовых файлов Frenki Помощь студентам 4 17.05.2009 14:52
Pascal. Обработка символьных данных. NitriNKa Помощь студентам 3 25.04.2009 15:15
Обработка символьных данных Normand Паскаль, Turbo Pascal, PascalABC.NET 6 13.04.2009 17:32