Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Мышление блондинок (https://forum.antichat.xyz/showthread.php?t=34273)

_Great_ 27.02.2007 00:06

Мышление блондинок
 
Итак, попробуем же реализовать на нашем любимом языке программирования (Си ;)) мышление блондинок :)
Напишем программу, которая будет генерировать из предложения "Привет. Как дела?" предлоежение "ПРИВЕТ!!!! КАК ДЕЛА????!!!!!" =))
Для этого нам нужно:
1) преобразовать все к верхнему регистру
2) если предложение вопросительное, дополнить его знаками вопроса
2) дополнить предложение восклицательными знаками
Приступим :)
Код:

#include <stdio.h>
#include <windows.h>

// Преобразование к верхнему регистру
// Разное для разных алфавитов
char touppercase(char c)
{
        if( c >= 'a' && c <= 'z' )
                return c + 'A' - 'a';
        else if( c >= 'а' && c <= 'я' )
                return c + 'А' - 'а';
        else
                return c;
}

// Преобразование предложения
void blonde(char* sentense)
{
        // К верхнему регистру
        for(char* sp = sentense;*sp;sp++)
                *sp = touppercase(*sp);
       
        // Длина предложения
        int len = strlen(sentense) + 1;

        // Если вопросительное - дополняем
        if( sentense[len - 2] == '?' )
                for(int i=0;i<7;i++)
                {
                        sentense[len + i - 1] = '?';
                        sentense[len + i] = 0;
                }
       
        // новая длина
        len = strlen(sentense) + 1;

        // дополняем "!"
        for(int i=0;i<7;i++)
        {
                sentense[len + i - 1] = '!';
                sentense[len + i] = 0;
        }
}

int main()
{
        while(1)
        {
                char buffer[1024];

                // Приглашение. Считываем строчку
                printf("blonde> ");
                gets(buffer);

                // OEM -> ANSI
                OemToChar( buffer, buffer );

                // Обрабатываем
                blonde(buffer);

                // ANSI -> OEM
                CharToOem( buffer, buffer );

                // Выводим
                printf("%s\n", buffer);
        }
        return 0;
}

Все :)
Вывод:
Цитата:

blonde> Привет, я блондинка
ПРИВЕТ, Я БЛОНДИНКА!!!!!!!
blonde> Как дела?
КАК ДЕЛА????????!!!!!!!
blonde>
Можно даже ICQ-бота написать )


ЗЫ. Оно зохавало мой моск!!!!!!11111 =\\

Abra 27.02.2007 00:09

давай не бот а модик под аську!
или веб оболочку хотя бы.
буду через нее с некоторыми общаться.

_Great_ 27.02.2007 00:13

Напишу веб оболочку )) Общацо

sni4ok 27.02.2007 00:16

а теперь о косячгах

Цитата:

Сообщение от _Great_
// Преобразование к верхнему регистру
// Разное для разных алфавитов
char touppercase(char c)
{
if( c >= 'a' && c <= 'z' )
return c + 'A' - 'a';
else if( c >= 'а' && c <= 'я' )
return c + 'А' - 'а';
else
return c;
}

ну да, стока буква, вместа обычной стандартной, сишной int toupper(int c );

Цитата:

// Преобразование предложения
void blonde(char* sentense)

берёшь сишную страку, делаешь её больше, а проверку на выход за пределы не проводишь.

_Great_ 27.02.2007 00:20

Цитата:

ну да, стока буква, вместа обычной стандартной, сишной int toupper(int c );
уверен, что она обрабатывает русский язык корректно?

Цитата:

берёшь сишную страку, делаешь её больше, а проверку на выход за пределы не проводишь.
я заблаговременно выделил 1024 байта под нее.
на большее оно не способно. А что ты хотел от блондинки?))

sni4ok 27.02.2007 00:29

Цитата:

Сообщение от _Great_
уверен, что она обрабатывает русский язык корректно?

ага, уверен

Цитата:

я заблаговременно выделил 1024 байта под нее.
на большее оно не способно. А что ты хотел от блондинки?))
ну может ты где-то эти 1024 байта и выделил.. а функции то это неизвестно, мог бы и размерчег передавать,
а вообще даже в твоём коде кто запрещает пользователю страку набить более чем 1к?

_Great_ 27.02.2007 00:33

Да че пристал, дай постебаться )))

DRON-ANARCHY 27.02.2007 00:49

на php все выйдет куда короче....

_Pantera_ 27.02.2007 00:49

а мне один раз примерно такая попалась :(

#include<iostream.h>
#include<windows.h>

const char*ru(const char*s)
{
static char but[256];
CharToOem (s,but);
return but;
}

void main()
{
int i=0;
int n;

for (i=0; i>n; i++)
cout<<ru("Че ты молчишь???????");

}

sni4ok 27.02.2007 02:18

Цитата:

Сообщение от _Great_
Итак, попробуем же реализовать на нашем любимом языке программирования (Си ;))

а теперь пишем плагин к миранде, который позволяет делать следующее:
при вводе /blo text, для text'а делаем замену на бландинистый стиль, и выплювывем обратна(работает как в личке(icq, irc), так и на irc канале, также наводимся на цель.
комадой
/aim имя_цели
которая устанавливает цель на irc канале,и при попытке этого чувачка написать текст, выводит нечто следующее
PHP код:

    [01:12]    sni40k15430UnNam3D wanna sayЧО ТАМА ????!!!!!
    [
01:12]    Dr_Check|offда
    
[01:12]    SliP|: -_-
    [
01:12]    UnNam3Dпро америкосов нах ?
    [
01:12]    sni40k15430UnNam3D wanna sayПРО АМЕРИКОСОВ НАХ ????!!!!! 

ну и собственно исходник плагинчега:

PHP код:


<?php



function mbot_load()
{
    
mb_SelfRegister(MB_EVENT_MSG_OUT|IRC_EVENT_GUI_OUT|IRC_EVENT_GUI_IN1);
}

function 
ConvertStringToBlondy($msg)
{
    
$msg = @strtoupper($msg);
    
$msg = @str_replace(",""!!!!"$msg);
    
$msg = @str_replace("?""????!!"$msg);
    
$msg $msg.'!!!';
    return 
$msg;
}

function 
MakeBlonyString($body){
    if(@
strlen($body) <= 6) return 0;
    if(@
substr($body,0,4) == '/blo'){
        
$msg = @substr($body,5);
        
$msg = @ConvertStringToBlondy($msg);
        return 
$msg;
    }
    return 
0;
}

function 
SetTarget($aim)
{
    if(@
strlen($aim) <= 6) return 0;
    if(@
substr($aim,0,4) == '/aim'){
        
$aim = @substr($aim,5);
        @
mt_setvar('target'$aim1);
        
mb_PUMsg('Target setted');
        return 
1;
    }
    return 
0;
}

function 
ApplyMsg($msg)
{
    
$ret = @SetTarget($msg);
    if(
$ret === 1) return 1;
    return @
MakeBlonyString($msg);
}

function 
mbe_MsgOut($cid,$body)
{
    
$msg = @ApplyMsg($body);
    if(
$msg === 0) return 0;
    if(
$msg === 1) return "drop";
    
mb_MsgSetBody($msg);
    return 
"send";
}

function 
irc_GuiOut($module,$iType,$channel,$pszUID,$text)
{
    
$msg = @ApplyMsg($text);
    if(
$msg === 0) return 0;
    if(
$msg === 1) return "drop";
    
mb_IrcSetGuiDataOut($iType,null,$pszUID,"$msg");
    return 
0;
}

function 
irc_GuiIn($module,$eventtype,$channel,$nick,$text)
{
    if(@
strcmp($eventtype64) == 0){
        
$target = @mt_getvar('target');
        if(@
strcmp($nick$target) == 0){
//            mb_PUMsg('voshli');
            
$msg = @ConvertStringToBlondy($text);
            if(
$msg === 0) return 0;
            
$msg $target.' wanna say: '.$msg;    
            
$msg '/MSG '.$channel.' '.$msg;
            
mb_IrcPostMessage($module,$msg);
//            mb_PUMsg($msg);
        
}
        return 
0;
    }
}

?>


да, работает он используя плагин:
MBot/MSP (Miranda Scripting Plugin)


Время: 19:25