Сообщений: 341
Тем: 32
Зарегистрирован: May 2011
Репутация:
57
Си/С++.
// string нельзя использовать, только char
Имеем примерный код:
PHP код: <?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.
Как вставить пробелы
Сообщений: 61
Тем: 9
Зарегистрирован: Nov 2011
Effas Написал:Как вставить пробелы
оффтоп?
нажать на пробел:cv:
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
Effas Написал:Си/С++.
nSpace = newLengthText - lengthText; // получаем кол-во пробелов, которые нужно вставить равномерно между словами в text. [/PHP]
Как вставить пробелы stncpy, strstr
Сообщений: 341
Тем: 32
Зарегистрирован: May 2011
Репутация:
57
Все таки придумал алгоритм, как забить пробелы. Уж оч долго че то думал (:
Если кому то вдруг понадобится, то ... :
PHP код: <?php
int nSpace = nWord - 1, // кол-во пробелов в строке
nAdd = (newLengthString - lengthString)/nSpace, // кол-во пробелов за 1н заход вставки
residuals = (newLengthString - lengthString)% nSpace, // остаток от деления
i = 0, // счетчик строки (str(editString))
j = 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), до тех пор, пока не снесем весь остаток.
Думую подробных коммеетариев к коду не требуется (:
Сообщений: 183
Тем: 8
Зарегистрирован: Dec 2011
Репутация:
89
Че вас там мучают то не использовать string ?)
Сообщений: 279
Тем: 5
Зарегистрирован: Jan 2012
Репутация:
2,906
JackTheRipp Написал:Че вас там мучают то не использовать string ?)
Сообщений: 341
Тем: 32
Зарегистрирован: May 2011
Репутация:
57
JackTheRipp Написал:Че вас там мучают то не использовать string ?) Препод (: (10симв)
Сообщений: 1,832
Тем: 50
Зарегистрирован: Oct 2009
Репутация:
62,283
Помню как писал программы в универе, уже хрен знает где ошибка, сидишь мучаешься, когда в конец все надоело, но надо "подогнать" под ответ... Берем какую-нить стандартную функцию типа prin tf, пишем prin lf(или что-нить посложнее, чтобы не впалили), потом кучу строк отсупаем и где-нить внизу функция которая подгоняет под ответ
//Кстати досих пор иногда шеллы так ныкаю
Сообщений: 1,759
Тем: 13
Зарегистрирован: May 2011
Репутация:
3,205
ReaM Написал:Помню как писал программы в универе, уже хрен знает где ошибка, сидишь мучаешься, когда в конец все надоело, но надо "подогнать" под ответ... Берем какую-нить стандартную функцию типа printf, пишем prinlf(или что-нить посложнее, чтобы не впалили), потом кучу строк отсупаем и где-нить внизу функция которая подгоняет под ответ
//Кстати досих пор иногда шеллы так ныкаю вот это да:redlol:
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
А канон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;
}
|