Пятница, 29 Марта 2024, 15:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
vasua99Дата: Воскресенье, 22 Декабря 2013, 18:07 | Сообщение # 1141
GNU follower
Сейчас нет на сайте
Что подразумевается под максимальной длиной?) А вообще так - Делишь строку на отдельные слова, вычисляешь длину каждого. Ну дальше проблем не должно быть.

P.S Может пригодиться


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
goldsphereДата: Воскресенье, 22 Декабря 2013, 18:38 | Сообщение # 1142
заслуженный участник
Сейчас нет на сайте
Destroy,
Код
#include <iostream>
#include <string>
using namespace std;

int main()
{
        char* s = ".hello.;lol.works";
        string word[99];
        int j, i, count, max;
        j = i = count = 0;
        while(s[i])
        {
         while(s[i] && (s[i] != '.' && s[i] != ';'))
         {
          word[j]+=s[i];
          i++;
         }
         if(word[j] != "")
          j++;
                
         i++;
        }
        max = word[0].length();
       for(int i=0;i<99;++i)
     {
      if(word[i].length() > max)
       max = word[i].length();
     }
     for(int i=0;i<99;++i)
      if(word[i].length() == max)
       count++;
        cout<<count;
        getchar();
        getchar();
        return 0;
}


То есть у тебя есть массив слов и исходная строка. Ты сначала выискиваешь эти слова и забиваешь их в массив. Находишь среди них самое длинное. Затем проверяешь сколько таких же длинных слов.


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Воскресенье, 22 Декабря 2013, 18:46
OpenGOOДата: Воскресенье, 22 Декабря 2013, 19:27 | Сообщение # 1143
почти ветеран
Сейчас нет на сайте
Можно и без массива слов обойтись, надо только сразу считать количество символов в слове, затем проверить на максимум и если слово максимальное посчитать его.

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
vasua99Дата: Воскресенье, 22 Декабря 2013, 19:31 | Сообщение # 1144
GNU follower
Сейчас нет на сайте
Код

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::vector;
using std::string;

int main() {
     string s = "hello.lol.works.";
     int lengthLongest = 0;
     int count = 0;
     vector<string> words;

     int pos = 0;
     string token;
     while ((pos = s.find(".")) != string::npos) {
         token = s.substr(0, pos);
         if (lengthLongest < token.length()) lengthLongest = token.length();
         words.push_back(token);
         s.erase(0, pos + 1);
     }
     for (vector<string>::iterator curr = words.begin(); curr != words.end(); curr++) {
         if (curr->size() == lengthLongest) count++;
     }
     cout << "Count of longest words: " << count << '\n';
     return 0;
}

Правда для поиска сразу по нескольким разделителям придется модифицировать кое-что. smile


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
OpenGOOДата: Воскресенье, 22 Декабря 2013, 20:39 | Сообщение # 1145
почти ветеран
Сейчас нет на сайте
Код
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
     char str[] =".hello.;lol.works";
     char* pch;
     int max_len = 1;
     int w_count = 0;

     pch = strtok(str,".;");

     while (pch != NULL)
     {
         int sl = strlen(pch);

         if (sl > max_len)
         {
             max_len = sl;
             w_count = 1;
         }
         else if (sl == max_len)
         {
             ++w_count;
         }

         pch = strtok (NULL, ".;");
     }

     cout << "words: " << w_count << endl;

     return 0;
}

Результат:

words: 2


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
vasua99Дата: Воскресенье, 22 Декабря 2013, 20:54 | Сообщение # 1146
GNU follower
Сейчас нет на сайте
Цитата OpenGOO ()
Код
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
char str[] =".hello.;lol.works";
char* pch;
int max_len = 1;
int w_count = 0;

pch = strtok(str,".;");

while (pch != NULL)
{
int sl = strlen(pch);

if (sl > max_len)
{
max_len = sl;
w_count = 1;
}
else if (sl == max_len)
{
++w_count;
}

pch = strtok (NULL, ".;");
}

cout << "words: " << w_count << endl;

return 0;
}

Результат:

words: 2


Кстати, только щас заметил. VS2013 выдает unsafe на strtok. Предлагает, strtok_s)


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
DestroyДата: Среда, 25 Декабря 2013, 00:19 | Сообщение # 1147
постоянный участник
Сейчас нет на сайте
спасибо всем за отклик)) cool
vasua99Дата: Четверг, 26 Декабря 2013, 20:32 | Сообщение # 1148
GNU follower
Сейчас нет на сайте
Вопрос по области видимости.

Насколько ясно, обьявление и директива "using" имеет внешнее связывание(если вне функций). Т.е если мы включим файл File.h с директивой "using" в файл Main.cpp, то она и там продолжить действовать. Есть ли вариант обьявить директиву, но с внутренним связыванием вне функций?. По аналогии с переменными с внутренним связыванием это выглядело бы так:

Код

static using std::string;

Но ясно, что так работать не будет. sad


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)

Сообщение отредактировал vasua99 - Четверг, 26 Декабря 2013, 20:33
voodooДата: Среда, 08 Января 2014, 02:25 | Сообщение # 1149
был не раз
Сейчас нет на сайте
Всем привет! Прошу вашей помощи, начал писать змейку на c, всё было хорошо, пока не встал вопрос насчёт хвоста, алгоритм в голове есть, но не могу это программно закрепить.

Вот фрагмент кода, если вас не затруднит, напишите для хвоста функцию, отталкиваясь от этого кода:
Код

  #include <iostream>  
  #include <conio.h>  
  #include <stdlib.h>  
  #include <windows.h>  
  #include <ctime>  
     
  using namespace std;  
     
  enum keys  
  {  
      Top = 119,  
      Down = 115,  
      Left = 97,  
      Right = 100  
  };  
     
  int move_Y(int pos_Y, int key_pressed)  
  {  
      switch (key_pressed)  
      {  
          case Top:  
              --pos_Y;  
              break;  
          case Down:  
              ++pos_Y;  
              break;  
      }  
     
      return pos_Y;  
  }  
     
  int move_X(int pos_X, int key_pressed)  
  {  
      switch (key_pressed)  
      {  
          case Left:  
              --pos_X;  
              break;  
          case Right:  
              ++pos_X;  
              break;  
      }  
     
      return pos_X;  
  }  
     
  int main()  
  {  
      COORD cursor = { 0, 0 };  
     
      const int width = 30;  
      const int height = 20;  
     
      char plane[width][height] = {0};  
     
      int pos_Y = height / 2;  
      int pos_X = 0;  
     
      int key_pressed = Right;  
     
      while (true)  
      {  
          Sleep(100);  
     
          if (_kbhit() == true)  
          {  
              key_pressed = _getch();  
          }  
     
          pos_Y = move_Y(pos_Y, key_pressed);  
          pos_X = move_X(pos_X, key_pressed);  
     
          SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);  
     
          for (int i = 0; i < height; ++i)  
          {  
              for (int j = 0; j < width; ++j)  
              {  
                  plane[j][i] = 0;  
     
                  plane[pos_X][pos_Y] = 1;  
              }  
          }  
     
          for (int i = 0; i < height; ++i)  
          {  
              for (int j = 0; j < width; ++j)  
              {  
                  cout << plane[j][i];  
              }  
              cout << endl;  
          }  
      }  
     
      return 0;  
  }


За ранее спасибо!
froexДата: Среда, 08 Января 2014, 17:02 | Сообщение # 1150
Руководитель Froexilize team
Сейчас нет на сайте
voodoo, в списке все части тела храни. При передвижении на следующую клетку в списке заменяешь голову на кусок тела, голову добавляешь в начало списка, один элемент конца списка удаляешь. Если взял что-то, что удлиняет змейку, то ставишь на место головы ставишь кусок тела, голову добавляешь в начало списка, элемент конца списка оставляешь как есть один раз.
http://rghost.ru/51486974 - исходники biggrin "чуть-чуть" подправил )))
P.S. Управление я не трогал - оно дебильное жуть. У меня твой вариант управления не пашет.

Добавлено (08.01.2014, 16:49)
---------------------------------------------
Ссылки на просмотр кода:
main.cpp: http://pastebin.com/FLPUNJaa
snake.cpp: http://pastebin.com/pd4PkFwR
snake.hpp: http://pastebin.com/iLwPuHRL
config.hpp: http://pastebin.com/CAe6cjhL

Добавлено (08.01.2014, 17:02)
---------------------------------------------
По поводу управления понял - кейкоды не верно указал. А вообще, для специальных клавиш два кейкода указываются. Может сбрасывать состояние чтением keystroke.


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.


Сообщение отредактировал froex - Среда, 08 Января 2014, 16:42
voodooДата: Среда, 08 Января 2014, 22:17 | Сообщение # 1151
был не раз
Сейчас нет на сайте
froex, спасибо конечно, но я рассчитывал на что-то по проще, я начинающий, поэтому для меня это не понятно confused
froexДата: Четверг, 09 Января 2014, 00:41 | Сообщение # 1152
Руководитель Froexilize team
Сейчас нет на сайте
Цитата voodoo ()
froex, спасибо конечно, но я рассчитывал на что-то по проще, я начинающий, поэтому для меня это не понятно

Что не понятно - в скайп froexilize.


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.
-l33t-h4xx-Дата: Четверг, 09 Января 2014, 10:38 | Сообщение # 1153
участник
Сейчас нет на сайте
voodoo, вот, например, моя змейка на С. Она использует библиотеку curses, но это неважно, главное алгоритм.
Вся змейка хранится в виде массива структур, в которых записаны координаты Х и Y. После каждого хода, в зависимости от направления движения, массив смещается назад, а координаты хвоста помещаются на следующую после головы клетку.
Код
#include <curses.h>
#include <malloc.h>
#include <stdlib.h>

#define SIZE    128
#define LEFT    1
#define RIGHT    2
#define UP    3
#define DOWN    4

typedef struct
{
   int x;
   int y;
} COORD;

int main(int argc, char *argv[])
{
   COORD *snake, fruit;
   int length, i, gameover = 0, tempx, tempy, direction = RIGHT, score = 0;
   char key;

   initscr(); cbreak(); noecho(); halfdelay(2);
   keypad(stdscr, TRUE);
   srandom(time(NULL));

   snake = (COORD*)malloc(sizeof(COORD)*SIZE);

   // Инициализация змеи
   for (i = 0; i < SIZE; i++)
   {
    snake[i].x = -1;
    snake[i].y = -1;
   }

   snake[2].x = 0;
   snake[1].x = 1;
   snake[0].x = 2;
   snake[0].y = snake[1].y = snake[2].y = 0;
   length = 2;

   // Конец инициализации

   fruit.x = fruit.y = 5;

   while (!gameover)
   {
    key = getch();

    tempx = snake[0].x;
    tempy = snake[0].y;

    switch (key)
    {
    case 'a':    direction = LEFT; break;
    case 's':    direction = DOWN; break;
    case 'w':    direction = UP;   break;
    case 'd':    direction = RIGHT;break;
    }
    switch (direction)
    {
    case LEFT:
     tempx--;
     break;
    case RIGHT:
     tempx++;
     break;
    case DOWN:
     tempy++;
     break;
    case UP:
     tempy--;
     break;
    }

    for (i = length; i > 0; i--)
    {
     snake[i].x = snake[i-1].x;
     snake[i].y = snake[i-1].y;
    }

    snake[0].x = tempx;
    snake[0].y = tempy;

    if (snake[0].x == fruit.x && snake[0].y == fruit.y)
    {
     length++, score++;
     snake[length] = snake[length-1];
     fruit.x = random()%80;
     fruit.x = random()%60;
    }

    for (i = 1; i <= length; i++)
    {
     if (snake[0].x == snake[i].x &&
         snake[0].y == snake[i].y )
      gameover = 1;
    }

    clear();

    for (i = 0; i <= length; i++)
    {
     move(snake[i].y, snake[i].x);
     addch('#');
    }
    move(fruit.y, fruit.x);
    addch('O');
    move(0, 0);
    refresh();
   }

   return 0;
}


Как правильно задавать вопросы

Сообщение отредактировал -l33t-h4xx- - Четверг, 09 Января 2014, 10:38
froexДата: Четверг, 09 Января 2014, 12:59 | Сообщение # 1154
Руководитель Froexilize team
Сейчас нет на сайте
-l33t-h4xx-,

Добавлено (09.01.2014, 12:52)
---------------------------------------------
-l33t-h4xx-, лучше использовать стандартные контейнеры для перемещения головы и хвоста. Стоимость затрат твоего перебора растёт с увеличением длины змейки, а использование контейнеров, как у меня, всегда имеет постоянную стоимость и сложность.

Добавлено (09.01.2014, 12:59)
---------------------------------------------
-l33t-h4xx-,
Cppcheck
main.cpp: Ошибка - Memory leak: snake


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.


Сообщение отредактировал froex - Четверг, 09 Января 2014, 12:41
DestroyДата: Четверг, 09 Января 2014, 18:28 | Сообщение # 1155
постоянный участник
Сейчас нет на сайте
помогите с заданием cry , буду очень признателен. Сессия горит



Сообщение отредактировал Destroy - Четверг, 09 Января 2014, 18:30
pelmenkaДата: Четверг, 09 Января 2014, 18:53 | Сообщение # 1156
Драгоценный Тунеядец
Сейчас нет на сайте
странное задание, будто для экстрасенсов писали

Сталина в каждый дом!
DestroyДата: Четверг, 09 Января 2014, 18:57 | Сообщение # 1157
постоянный участник
Сейчас нет на сайте
Цитата pelmenka ()
странное задание, будто для экстрасенсов писали

это как?
RUNGOGET2THECHOPAHДата: Четверг, 09 Января 2014, 19:07 | Сообщение # 1158
участник
Сейчас нет на сайте
Цитата Destroy ()
это как?

Из задания не понятно, что нужно сделать.
О каком вообще диапазоне идет речь? Что за исходный и результирующий массивы? Что значит сформировать столбцы из строк? Транспонировать матрицу что ли? Выводить нужно исходный или результирующий массив?
DestroyДата: Четверг, 09 Января 2014, 19:10 | Сообщение # 1159
постоянный участник
Сейчас нет на сайте
Цитата RUNGOGET2THECHOPAH ()
О каком вообще диапазоне идет речь?

его вводишь сам
Цитата RUNGOGET2THECHOPAH ()
Что за исходный и результирующий массивы?

исходный который сам вводишь, результирующий который в результате действий над матрицой
Цитата RUNGOGET2THECHOPAH ()
Что значит сформировать столбцы из строк? Транспонировать матрицу что ли?

да, то есть было так: 1 2 3
стало так
1
2
3

Цитата RUNGOGET2THECHOPAH ()
Выводить нужно исходный или результирующий массив?

результирующий
pelmenkaДата: Четверг, 09 Января 2014, 19:12 | Сообщение # 1160
Драгоценный Тунеядец
Сейчас нет на сайте
Чем разделять числа? Пробелом или чем-то еще? Что значит "дополнить нулями"? и т. д.

Добавлено (09.01.2014, 19:12)
---------------------------------------------

Цитата Destroy ()
его вводишь сам

Ладно, диапазоне чего? Кол-ва чисел или их значения?


Сталина в каждый дом!
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг