Запичкать пробела - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 14.03.2012, 21:05   #1
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Запичкать пробела

Си/С++.
// string нельзя использовать, только char
Имеем примерный код:
PHP код:
char text[256] = {0}; // строка с текстом
int lengthText 0// длина строки (text)
int newLengthText 0// новая длина строки
int nSpace 0// кол-во доб. пробелов
printf("Enter text: ");
gets(text);
// допустим получили строку = "zone game info forum";
// получаем длину строки (lengthText = 20;)
lengthText strlen(text);
// вводим новую длину строки (newLengthText будет > lengthText && < 255);
printf("Enter newLengthText: ");
gets(newLengthText); // ввели допустим 27
nSpace newLengthText lengthText// получаем кол-во пробелов, которые нужно вставить равномерно между словами в text. 
Как вставить пробелы
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 14.03.2012, 21:10   #2
Изгнанные

Thumbs up Re: Запичкать пробела

Цитата:
Сообщение от Effas Посмотреть сообщение

Как вставить пробелы
оффтоп?:
Свернуть ↑Развернуть ↓
Джол вне форума Ответить с цитированием
Непрочитано 14.03.2012, 21:13   #3
Аватар для Azagthtot
Эксперт

По умолчанию Re: Запичкать пробела

Цитата:
Сообщение от Effas Посмотреть сообщение
Си/С++.

nSpace = newLengthText - lengthText; // получаем кол-во пробелов, которые нужно вставить равномерно между словами в text. [/PHP]

Как вставить пробелы
stncpy, strstr
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 15.03.2012, 22:16   #4
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Запичкать пробела

Все таки придумал алгоритм, как забить пробелы. Уж оч долго че то думал (:
Если кому то вдруг понадобится, то ... :
PHP код:
    int nSpace nWord 1,                                     // кол-во пробелов в строке
        
nAdd = (newLengthString lengthString)/nSpace,         // кол-во пробелов за 1н заход вставки
        
residuals = (newLengthString lengthString)% nSpace,   // остаток от деления
        
0,                                                  // счетчик строки                            (str(editString)) 
        
0,                                                  // счетчик новой строки                      (str_2(newString)) 
        
counterSpace 0,                                       // счетчик пробелов 
        
position 0;                                           // позиция для выполнения
...

if(
residuals!=0)
            {
                
nAdd++;
                
residuals--;
                
                for(
counterSpace 0;counterSpace<nAdd;counterSpace++)
                {
                    
j++;
                    
str_2[j] = ' ';
                }
                
                
i++;
                
position 0;
                
nAdd--;
            } 
Пока есть остаток, кол-во пробело будет больше на 1ну единицу(было 3, станет 4), до тех пор, пока не снесем весь остаток.
Думую подробных коммеетариев к коду не требуется (:
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 15.03.2012, 22:51   #5
Аватар для shocked
Пользователь

По умолчанию Re: Запичкать пробела

Че вас там мучают то не использовать string ?)
shocked вне форума Ответить с цитированием
Непрочитано 15.03.2012, 23:52   #6
Герой

По умолчанию Re: Запичкать пробела

Цитата:
Сообщение от JackTheRipp Посмотреть сообщение
Че вас там мучают то не использовать string ?)
__________________
http://forum.zone-game.info/showthread.php?t=23295 12% скидка на рекламу бесплатно
Gannik вне форума Ответить с цитированием
Непрочитано 16.03.2012, 01:16   #7
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Запичкать пробела

Цитата:
Сообщение от JackTheRipp Посмотреть сообщение
Че вас там мучают то не использовать string ?)
Препод (: (10симв)
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 16.03.2012, 01:59   #8
Эксперт

По умолчанию Re: Запичкать пробела

Помню как писал программы в универе, уже хрен знает где ошибка, сидишь мучаешься, когда в конец все надоело, но надо "подогнать" под ответ... Берем какую-нить стандартную функцию типа printf, пишем prinlf(или что-нить посложнее, чтобы не впалили), потом кучу строк отсупаем и где-нить внизу функция которая подгоняет под ответ

//Кстати досих пор иногда шеллы так ныкаю
ReaM вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 16.03.2012, 06:10   #9
Аватар для linliss
Герой

По умолчанию Re: Запичкать пробела

Цитата:
Сообщение от ReaM Посмотреть сообщение
Помню как писал программы в универе, уже хрен знает где ошибка, сидишь мучаешься, когда в конец все надоело, но надо "подогнать" под ответ... Берем какую-нить стандартную функцию типа printf, пишем prinlf(или что-нить посложнее, чтобы не впалили), потом кучу строк отсупаем и где-нить внизу функция которая подгоняет под ответ

//Кстати досих пор иногда шеллы так ныкаю
вот это да
linliss вне форума Ответить с цитированием
Непрочитано 16.03.2012, 09:39   #10
Аватар для Azagthtot
Эксперт

По умолчанию Re: Запичкать пробела

А канонiчный justify написать не судьба? Делов на 5 мин
Код:
const char *justify(const char *str, const size_t len) {
 if(len <= strlen(str))
    return str;
 size_t justify_size = len - strlen(str);
 char *result = (char*)malloc(len+1);
 memset(result,0,len+1);
 char *p = (char *)str;
 char *end = p + strlen(str);
 unsigned int *spaces = (unsigned int*)malloc(strlen(str));
 unsigned int *curspace = spaces;
 unsigned int num_spaces = 0;
 memset(spaces,0,strlen(str));
 for(;p<end;) {
  while(p<end && *p!=' ') p++;
  if(p<end) 
    num_spaces++;
  while(p<end && *p==' ') {
    (*curspace)++;
    p++;
  }
  curspace++;

 }
 curspace = spaces;
 unsigned int to_add = justify_size / num_spaces;
 p = (char *) str;
 char *dest = result;
 for(;p<end;) {
   if(*p==' ')  {
     for(int i=0;i<*curspace+to_add;i++) {
       *dest = ' ';
       dest++;
     }
     while(p<end && *p==' ') p++;
   }     
   *dest = *p;
   p++; dest++;
 }
 free(spaces);
 return result;
}
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2022 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 13:09. Часовой пояс GMT +3.

Вверх