[a / aa / ad / au / b / bg / bo / c / d / dg / di / ew / f / fa / fd / fg / fi / fl / g / gg / h / ho / hr / ja / k / ls / m / ma / me / mo / mu / n / ne / o / p / pa / ph / pr / r / re / s / sp / t / td / tr / tv / u / vg / w / wh / wm / wp / y] - [Главная]

[Назад]
Ответ
(оставьте это поле пустым)
Имя (оставьте это поле пустым)
E-mail
Тема
Комментарий
Файл
Перейти к
Подтверждение обновить captcha
Пароль (чтобы удалить пост или файл)
  • Разрешённые типы файлов: GIF, JPG, PNG
  • Максимальный размер файла 1536 килобайт и 2048×2048.
  • Изображения размером более 200x200 точек будут уменьшены.

№686  

Дефис.ч, помоги студентоте написать прогу на Си, вот задание:

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

С меня тысячи интернетов.

>> №688  

Писал сразу в тред, компелить не пробовал.
Добавь инклуды какие нужно.

char g_Sentense[] = "Ya sosy hui";
int g_SLen;
char g_Temp[100][256];
int g_TLen;
void flush(char* buf)
{
if(strlen(buf)<=0)
{

  return;

}
strcpy(g_Temp[g_TLen], buf);
g_TLen++;
}
void main(void)
{
g_TLen = 0;
g_SLen = strlen(g_Sentense);
bool bwrite = false;
char bufer[256];
int bufLen = 0;
bufer[0] = '\0';
for(int i=0; i<g_SLen; i++)
{

 bool curw = bwrite;
char ch = g_Sentense[i];
if(ch != ' ')
{
bwrite = true;
}
else
{
bwrite = false;
}
if(bwrite)
{
bufer[bufLen] = cur;
bufLen++;
}
if(bwrite!=curw)
{
bufer[bufLen-1] = '\0';
flush(bufer);
bufLen = 0;
bufer[0] = '\0';
}

}
flush(bufer);
for(int i=0;i<g_TLen;i++)
{

 printf("%s", g_Temp[i]);

}
getch();
}

>> №689  

Писал сразу в тред, компелить не пробовал.
Добавь инклуды какие нужно.

format PE GUI 4.0
entry start
include 'win32a.inc'
section '.data' data readable writeable
fgay   db 'You    are a fucking  gay!', 0
fgay_len = $-fgay-1
section '.code' code readable executable
start:
cld
mov ecx, fgay_len
lea edi, [fgay]
mov al, ' '
next:
repne scasb
jecxz exit
cmp byte [edi], ' '
jne next
move:
lea esi, [edi+1]
rep movsb
jmp start
exit:
invoke MessageBox, 0, fgay, fgay, MB_OK
invoke ExitProcess, 0
data import
library kernel32, 'kernel32.dll', user32, 'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
end data
>> №692  

>>689

>прогу на Си

Внезапно осознаем, что это было толсто.

>> №693  

>>692 В Си нету ассемблерных вставок?

>> №694  

>>693
Ну ты же понимаешь, что ему нужен именно код на си, причем написанный, лол, на его уровне.
Защищать ведь работу ему нужно будет.

>> №695  

>>694
Ладно, ты выиграл, я трололо и мне просто скучно.

>> №700  

Заебало нахуй все.

#include <stdio.h>

void remove_unnecessary_spaces( char *str )
{
int char_index = 0;
int prev_char_was_space = 0;
int displacement = 0;

do
{

if( str[ char_index ] == ' ' )
{
if( prev_char_was_space ) ++displacement;
prev_char_was_space = 1;
}
else
prev_char_was_space = 0;
str[ char_index - displacement ] = str[ char_index ];

}while( str[ char_index++ ] != 0 );
}

int main( void )
{
char str[128];

sprintf( str, "zaebalo nahuy vse" );
printf( "before: %s\n", str );
remove_unnecessary_spaces( str );
printf( "after: %s\n", str );
return 0;
}

ОП-кун, ты дебил. Двач тебя не спасет. Ты не можешь написать даже такого.
Бросай универ, стань хикки, сиди дома и фапай по 7 раз в сутки.

>> №728  

А вот няшный питон
def remove(s):

 return " ".join(filter(lambda x:x, s.split(' ')))

print remove("you are gay!")

>you are gay!
>> №731  

>>728
Ах, как же круто.
Неужели эту задачу можно решить регулярными выражениями?

>> №744  

>>731

Вот так быдлоскриптинг и поражает неокрепшие мозги.
В реальности интерпретатор будет делать дохуя временных строковых переменных. По одной на каждое слово. То есть сканировать строку на предмет пробелов, выделять под то, что межу пробелами, память, запоминать в специальном своем списке указатели и, собственно, копировать из исходной строки в эти временные переменные. А потом будет сшивать это в еще одну временную переменную. И, наконец, подчищать весь оставшийся мусор и выкидывать из своего специального списка мертвые указатели.

Зато скрипт в одну строку. Ах, блять, как же это круто.

>> №748  

>>744
и что? Задача поставлена не в написании кода под калькулятор. И выполнится она за 10^-10 секунды или 10^-9 роли не играет.

1:
return string.Join(" ", str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));

2:
string tmp;
do
{

 tmp = str;
str = str.Replace(" ", " ");

}
while (tmp != str);
return str;

>> №749  
Файл: 1244803887115.jpg -(35кб, 400x250) Показана уменьшенная копия, оригинал по клику.
35

>>748
просто съеби лепить супы

>> №751  
#include <stdio.h>
/*removes multiple spaces-K.R. exercise*/
main()
{
int a,b; a=b=0;
while((a=getchar())!=EOF)
{
if (a==' ' && b==1);
else if (a!=' '){
putchar(a);
b=0;}
else if (a==' '){
b=1;
putchar(a);}
}
printf ("\n");
}
exit 0;
>> №753  

>>728
ты упоротый на всю голову наркоман
" ".join(s.split())

>> №754  

нннниииииииийяяяяяяяяяяяяяяяяяяяяааааааааааааааааааааааааааааа

#!/usr/bin/perl
local $s = "xyu sosi guboy trysi";
$s =~ s/( )+/ /ig;
print $s;
>> №760  

do { str = str.Replace(" ", " "); }
while (str.IndexOf(" ") != -1);

>> №780  

>>688 This won't work
>>689 This is not C
>>700 Doesn't compile
>>728 This is not C
>>751 Doesn't compile
>>754 Nice try, won't work

>> №791  

>>780

>700 Doesn't compile

Пиздеть-то.
Цитирую gcc из кодеблокса:

-------------- Build: Release in zaebalo ---------------

Compiling: main.c
Linking console executable: bin\Release\zaebalo.exe
Output size is 5.50 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings

Я даже больше скажу: оно делает именно то, что требуется.

>> №802  
#! /usr/bin/tclsh
#Вакаба съедает пробелы :(
set str "this     string   contains     spaces"
foreach w $str {
lappend new_str $w
}
puts $new_str
>> №806  

>>802
Вы просто обязаны решить задачу путем отсылки строки в 2-ch.

Вот пока еще вариант на Си:
char str[] = "fgsfds fgsfds ";
void main(void)
{
bool flag = false;
for(int i=0;i<strlen(str);i++)
{
if(!flag)
{
printf("%c", str[i]);
if(str[i]==' ')
{
flag = true;
}
}
else
{
if(str[i]!=' ')
{
flag = false;
}
}
}
}

>> №807  

>>806
fast fix:

char str[] = "fgsfds fgsfds ";
void main(void)
{
bool flag = false;
for(int i=0;i<strlen(str);i++)
{
if(!flag)
{
printf("%c", str[i]);
if(str[i]==' ')
{
flag = true;
}
}
else
{
if(str[i]!=' ')
{
flag = false;
printf("%c", str[i]);
}
}
}
}
>> №810  
Файл: 1244892156377.jpg -(51кб, 360x343) Показана уменьшенная копия, оригинал по клику.
51

>>806

>>Вы просто обязаны решить задачу путем отсылки строки в 2-ch.
>> №812  

>>806>>807
Пиздец-то какой... И эти люди потом ругают православный Питон, "типо медлинна".

>for(int i=0;i<strlen(str);i++)

Как работают strlen и for, знаем? Сколько раз будет считаться strlen?

>printf("%c", str[i]);

Тоже ппц, но по сравнению с предыдущим это хуита.

>> №813  

>>812

>Сколько раз будет считаться strlen?

strlen(str) раз.

>> №814  

>>813
Верно, а как вычислительная сложность strlen зависит от длины строки? И как тогда будет зависеть от длины строки вычислительная сложность всей программы?

>> №815  

>>814
Линейно же!

>> №816  

>>815
Хотя линейно на линейно, получаем квадратично?
Капитан, помогай!

>> №817  

>>815
>>816

Да, это так.
К.О.

>> №820  

Капитан ненастоящий. Сложность оценивается в наихудшем случае. То есть, если вся строка состоит из пробелов. На самом деле, в хорошем алгоритме, побуквенном - линейная 2N, ведь зависимости между символами нет (кроме сравнения предыдущего символа с текущим). Если бы, скажем, нужно было удалять каждые 3 пробела, сложность была бы 3N. Однако же существуют долбоёбы, способные и факториальную зависимость создать. Алсо, красота алгоритма и его вычислительная сложность могут быть и обратно пропорциональными. Примеры выше по треду. Так-то!
Всегда ваш

>> №825  

>>812
C programmers doesnt know about iterators
В этом месте знание С++ пригодилось бы
ptr = str;
end = str;
while(*end!='\0')
++end;
while(ptr = end){
//do smth
}

>> №826  

>>825

>while(ptr = end)

for(ptr = str; ptr != end; ++ptr)
стремительный самофикс

>> №828  
(setq r (concatenate 'list "you    are all        gays"))
(setq a "")

(defun add (c)
(setq a (concatenate 'string a (string c))))

(defun out1 (c)
(if (not (eql #\Space (setq u (pop r))))
(add u)(if (not (eql c u))(add u)))
(if (not (eql r NIL))
(out1 u)))

(out1 "")
(print a)
>> №830  

<code>
gcc -W -Wall -pedantic -ansi foobar.c
%!./a.
./a.out "12 3 456 7 8 9 1011"
'12 3 456 7 8 9 1011' => '12 3 456 7 8 9 1011'
%cat foobar.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
char *p;
size_t idx;

if (argc != 2 || argv[1] == NULL)

return EXIT_FAILURE;

printf("'%s'", argv[1]);

for (idx = 0, p = argv[1]; *p ; p++) {

if (*p == ' ' && *(p + 1) == ' ') {
continue;
}
argv[1][idx++] = *p;

}
if (argv[1] + idx + 1 != p)

argv[1][idx++] = '\0';

printf(" => '%s'\n", argv[1]);

return EXIT_SUCCESS;
}
</code>

>> №832  

>>830
WIN

>> №833  

>>820
Блять, ещё один идиот... В коде >>807 функция strlen вызывается столько раз, сколько символов в строке (даже на один раз больше, если быть точным). Причём сама функция имеет линейную сложность. Итого сложность всего кода - квадратичная, просто из-за того, что по-дебильному организован цикл.
ЧТО именно он там в этом цикле делает - в данном случае ни на что не влияет. Сложность будет квадратичной даже если пробелов в строке вообще нет.
В то время как нормальный алгоритм для решения этой задачи имеет, очевидно, линейную сложность.

>> №834  

>>828
За что я люблю LISP, так это за лаконичность, особенно в решении действительно сложоых алгоритмических задач.

Деткам в треде учиться у гуру.

>> №835  

>>830
%diff -Nur foobar.c.orig foobar.c
--- foobar.c.orig 2009-06-13 21:10:07.000000000 +0400
+++ foobar.c 2009-06-13 21:09:35.000000000 +0400
@@ -17,10 +17,7 @@

 }
argv[1][idx++] = *p;

}

  • if (argv[1] + idx + 1 != p)
  • argv[1][idx++] = '\0';

-

  • printf(" => '%s'\n", argv[1]);
  • printf(" => '%.*s'\n", (int) idx, argv[1]);

return EXIT_SUCCESS;
}
%

830-кун

>> №839  

>>830
gcc -W -Wall -pedantic -ansi foobar.c
%!./a.
./a.out "12 3 456 7 8 9 1011"
'12 3 456 7 8 9 1011' => '12 3 456 7 8 9 1011'
%cat foobar.c

Что это за неведомая неведь? Вызываю капитана!

>> №841  

>>839
это unix-like системы, детка, % - приглашение шелла
gcc - gnu c компилятор

>> №845  

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

int main(int argc, char *argv[]) {

char    *request        =   argv[1];
char *request_end = request;
char *request_ptr = request;
int size = 0;
while (*request_end!='\0'){
++request_end;
++size;
}
char *response = malloc(size + 1);
char *response_ptr = response;
int is_prev_space   =   0;
for (; request_ptr != request_end; ++request_ptr) {
if (*request_ptr != ' ') {
*response_ptr = *request_ptr;
++response_ptr;
is_prev_space = 0;
} else {
if (!is_prev_space) {
is_prev_space = 1;
*response_ptr = ' ';
++response_ptr;
}
}
}
printf("%s\n",response);
free(response);
return 0;

}

>> №846  

Это задачка из K&R, вот решение http://users.powernet.co.uk/eton/kandr2/krx109.html
Алсо там решения всех задач из книги.

>> №864  

>>828
WIN

>> №866  

>>841 gcc - gnu compiler collection

>> №867  

>>751 WIN
раз уж все стали так говорить о своих вариантах.

>> №869  

[code]
f (' ':[]) = []
f (' ':tl) = ' ':(f $ dropWhile (==' ') tl)
f (hd:[]) = [hd]
f (hd:tl) = hd : (f tl)
[/code]

>> №909  

>>845
извини, но malloc заставляет меня рыдать.
двачую >>830 - красиво сделано

c: ce lol

>> №951  

>>869
OH SHI

unword.words

же

>> №952  

>>951

>unword*s*

fixes

>> №958  

>>951
Я еще лох пока, не весь Prelude помню.



Удалить пост []
Пароль
[a / aa / ad / au / b / bg / bo / c / d / dg / di / ew / f / fa / fd / fg / fi / fl / g / gg / h / ho / hr / ja / k / ls / m / ma / me / mo / mu / n / ne / o / p / pa / ph / pr / r / re / s / sp / t / td / tr / tv / u / vg / w / wh / wm / wp / y] - [Главная]