Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделение слова из предложения 
:(
    Опции темы
AlekSPUNK
Дата 18.10.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



Помогите пожалуйста, не могу выделить n-ое слово из предложения. Пишет вот такую ошибку: error C2109: subscript requires array or pointer type 

вот сообственно...

Код




#include "stdafx.h"
#include "iostream"
#include "string.h"
using namespace std;
char slovo(char *s, int n);


int _tmain(int argc, _TCHAR* argv[])
{   
    char s[100];
    cout<<"vvedite predlozenie"<<endl;
    cin.getline(s,100);    
    cin.get(); 
            cout<<slovo(s,1);
    return 0;
}

char* slovo(char s, int n)
{   
    char *sl=(char *) malloc(sizeof(char));
    int j=0;
    for (int i=0;i<strlen(s);i++)
    {  
        if (s[i]!=' ' || s[i]!=','))  // Пишет вот такую ошибку: error C2109: subscript requires array or pointer type 
        {   realloc(sl,(j+1)*sizeof(char));            
            sl[j]=s[i];  // и здесь тоже: error C2109: subscript requires array or pointer type 
            j++;
        }
        else n--;    
        if (n==0) return sl;
        else j=0;
    }
    free(sl);
    return 0;
}



Это сообщение отредактировал(а) AlekSPUNK - 18.10.2008, 16:26
PM MAIL   Вверх
mrbrooks
Дата 18.10.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



AlekSPUNK, а зачем ваять свой велосипед когда есть функция strstr - которая ищет подстроку в строке? или ты думаешь что напишень лучше? smile 


PM MAIL   Вверх
AlekSPUNK
Дата 18.10.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



мне просто надо функцию slovo потому что необходимо будет выделять слова с разными номерами в предложении 
PM MAIL   Вверх
eyeofhell
Дата 18.10.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

Репутация: 1
Всего: 1



Все правильно, у вас опечатка:

Код

char* slovo(char s, int n)
{
  ...
  // s имеет тип char, см. выше. А [] можно использовать только для указателей, массивов
  // и специально обученных классов. Ну и скобочка вроде лишняя.
  // Наверное, вы хотели написать char* slovo(char* s, int n) ?
  if (s[i]!=' ' || s[i]!=','))

PM MAIL ICQ   Вверх
AlekSPUNK
Дата 18.10.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



Спасибо Большое eyeofhell  smile . 
Только вот  не выводит ничего 
cout<<slovo(s,1);
PM MAIL   Вверх
eyeofhell
Дата 18.10.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

Репутация: 1
Всего: 1



По выходным телепатия тоже плохо работает :(. Если нужна консультация - скопируйте исходник. Именно тот, который не выводит.
PM MAIL ICQ   Вверх
AlekSPUNK
Дата 18.10.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



Сорри   smile 

Код

#include "stdafx.h"
#include "iostream"
#include "string.h"
using namespace std;
char* slovo(char* s, int n);

int _tmain(int argc, _TCHAR* argv[])
{   
    char s[100];
    cout<<"vvedite predlozenie"<<endl;
    cin.getline(s,100);   
    cout<<slovo(s,1);
    cin.get();
    return 0;
}

char* slovo(char* s, int n)
{   
    char *sl=(char *) malloc(sizeof(char));
    int j=0;
    for (int i=0;i<strlen(s);i++)
    {  
        if (!(s[i]==' ' || s[i]==','))
        {   realloc(sl,(j+1)*sizeof(char));             
            sl[j]=s[i];
            j++;
        }
        else n--;    
        if (n==0) return sl;
        else j=0;
    }
    free(sl);
    return 0;
}




Это сообщение отредактировал(а) AlekSPUNK - 18.10.2008, 17:55
PM MAIL   Вверх
eyeofhell
Дата 18.10.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

Репутация: 1
Всего: 1



Все правильно, есть ряд ошибок:

Код

if (!(s[i]==' ' || s[i]==','))
{
  // realloc не так работает. Он выделяет новую память нужно размера, копирует
  // туда содержимое старой, удаляет старую и возвращает указатель на новую.
  // так что после первого realloc sl будет указывать на освобожденную память.
  // Нужно писать sl = realloc( sl, j + 1 )
  realloc(sl,(j+1)*sizeof(char));             
  sl[j]=s[i];
  j++;
}
else
{
  // при n = 1 после нахождения первого пробела ЭТО сделать n = 0 и в следующей
  // строке функция вернет sl. Это точно нужное поведение? slovo( ..., 1 ) должно
  // вернуть первое слово? Обычно используют индексы начиная с 0
  n--;
}
// строку нужно заканчивать 0
if (n==0) return sl;
else j=0;

PM MAIL ICQ   Вверх
AlekSPUNK
Дата 18.10.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



eyeofhell  Вы уверены что так можно : sl = realloc( sl, j + 1 )? мне выдаёт ошибку :( 


PM MAIL   Вверх
eyeofhell
Дата 18.10.2008, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

Репутация: 1
Всего: 1



Цитата

Вы уверены что так можно : sl = realloc( sl, j + 1 )? мне выдаёт ошибку :( 


cannot convert from void* to char* ? Это не ошибка, это ваша запись не соответствует синтаксису С smile. Образец:

Код

char* slovo(char* s, int n)
{   
  char *sl=(char *) malloc(sizeof(char));
  int j=0;
  for( int i=0;;i++ )
  {  
    if( s[i]!=' ' && s[i]!=',' && s[i]!=0 )
    {
      sl = (char*)realloc(sl,(j+1)*sizeof(char));
      sl[j]=s[i];
      j++;
    }
    else
    {
      if (1 == n)
      {
        sl = (char*)realloc(sl,(j+1)*sizeof(char));
        sl[j]=0;
        return sl;
      }

      if( 0 == s[i] )
      {
        free(sl);
        return 0;      
      }

      n --;
      j = 0;
    }
  }
}


P.S. Остальные ошибки я тоже на всякий случай исправил. Там их прилично было.
PM MAIL ICQ   Вверх
AlekSPUNK
Дата 18.10.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



eyeofhell     smile  СПАСИБО! теперь все отлично   smile 
Надеюсь мне прощаеться 3 неделю токо на С++ много еще чего придёться узнать
PM MAIL   Вверх
eyeofhell
Дата 18.10.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

Репутация: 1
Всего: 1



Цитата

Надеюсь мне прощаеться 3 неделю токо на С++ много еще чего придёться узнать 


Для третей недели нормально. Я уже более 10 лет С++ пользуюсь. До сих пор иногда узнаю что-нибудь новое и интересное smile.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.