[ Jovan Marjanovic @ 15.02.2002. 09:50 ] @
Naime, kako bi se izvela naj jednostavnija implementacija "trim" funkcije koja postoji u pascalu naprimer. Smisao funkcije je da "trimuje" stringove, tj da skida spejsove sa pocetka ili kraja stringa. Ja sam se igrao sa time, ali mi nijedna varijanta koju sam napisao ne odgovara.
Implementacija koja me zanima bi trebala da bude cisti ANSI C.
[ Jovan Marjanovic @ 15.02.2002. 12:58 ] @
I sada da odgovorim sam sebi posto nisam bas tolika lenstina :)

ovo bi trebalo da radi za right trim koji mi i treba

Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char *trim(char *str)
{
        int i;

        if(str && 0 != (i=strlen(str)))
        {
                while (--i >= 0)
                {
                        if(!isspace(str[i]))
                                break;
                }
                str[++i] = '\0';
        }

        return str;
}



[ Dragi Tata @ 15.02.2002. 17:05 ] @
Citat:
blue:

Code:

        if(str && 0 != (i=strlen(str)))



Hehe, po ovakvim stvarima prepoznajem C programere na kilometar.
[ Mikky @ 15.02.2002. 22:28 ] @
jest' da imam malo iskustva sa drugim HLL jezicima osim c/c++
ali po cemu su to C programeri toliko prepoznatljivi :)
[ Dragi Tata @ 15.02.2002. 23:50 ] @
Citat:
Mikky:
jest' da imam malo iskustva sa drugim HLL jezicima osim c/c++
ali po cemu su to C programeri toliko prepoznatljivi :)


Po "ne baš čitljivim" konstrukcijama kao što je ona gore. C programeri vole "spartanski" kod: uradi što više stvari u što manje linija.
[ Dragi Tata @ 17.02.2002. 02:47 ] @
Nego, da ne ispadne kako samo zanovetam, evo levog i desnog trima u C++u. Ovo radi sa ma kojim character setom, uključujući i UNICODE.

Code:

#include <string>
#include <set>
#include <iostream>
using namespace std;

template <typename CharType>
void TrimLeft(basic_string<CharType>& str, const set <CharType>& spaceCharacters)
{
    basic_string<CharType>::iterator it;

    for (it = str.begin(); it != str.end(); ++it)
    {
        if (spaceCharacters.find(*it) == spaceCharacters.end())
        {
            str.erase(str.begin(), it);
            return;
        }          
    }
}

template <typename CharType>
void TrimRight(basic_string<CharType>& str, const set <CharType>& spaceCharacters)
{
    basic_string<CharType>::iterator it;

    for (it = str.end() - 1; it != str.begin(); --it)
    {
        if (spaceCharacters.find(*it) == spaceCharacters.end())
        {
            str.erase(it + 1, str.end());
            return;
        }          
    }
}

int main()
{
    set<char> spaceChars;
    spaceChars.insert (' ');
    spaceChars.insert ('t');

    string str("    abc             ");
    TrimLeft(str, spaceChars);
    TrimRight(str, spaceChars);
    cout << str;
}
[ Jovan Marjanovic @ 18.02.2002. 12:08 ] @
Mislim da sam se odavno deklarisao za C programera :))

Inace, glavni princip svakog pravog C programera je da napise kod koji samo on moze da procita i odrzava :)

(sala mala, posalica)
[ Dragi Tata @ 18.02.2002. 20:39 ] @
Citat:
blue:
Mislim da sam se odavno deklarisao za C programera :))

Inace, glavni princip svakog pravog C programera je da napise kod koji samo on moze da procita i odrzava :)

(sala mala, posalica)


Hehe, možda imaš pravo. Zašto da svaki pacer čita i održava tvoj kod?

Nego, dobro bi bilo da promeniš ime brojača od i u recimo j. Kada staviš i u uglaste zagrade, forum misli da je to oznaka za italic i ne prikaže ga uopšte. Pomisliće neko da si greškom napisao str umesto str[j].
[ Jovan Marjanovic @ 21.02.2002. 09:18 ] @
Da, primetio sam da nesto nije bilo kako treba sa tim kodom.
Mozda bi gojko mogao malo da sheka forum pa da sve sto je uzmedju code tagova bude ne-formatirano dalje.
[ leka @ 22.02.2002. 07:39 ] @
Tabovi su problem zapravo... HTML ne razlikuje TAB i SPACE.
[ leka @ 22.02.2002. 08:29 ] @
Evo ga moje resenje sklepano pre spavanja:
Code:

char* rtrim(char* szStr)
{
    int ii = strlen(szStr)-1;
    while (isspace(szStr[ii]) && ii >= 0) 
        ii--;
    szStr[ii+1]='\0';
    return strdup(szStr);   
} // rtim()


Pozdrav svima citamo se sutra :))))
[ Gojko Vujovic @ 22.02.2002. 11:22 ] @
Mogu da napravim da uopste ne prepoznaje ubb codes ako poruka sadrzi [ code ] i [ /code ] tagove.

Time bi [ i ] i slicni tagovi ostali netaktnuti.

Imate bolji predlog/resenje? PHP molim :)
[ Dragi Tata @ 22.02.2002. 15:50 ] @
Citat:
Gojko Vujovic:
Mogu da napravim da uopste ne prepoznaje ubb codes ako poruka sadrzi [ code ] i [ /code ] tagove.

Time bi [ i ] i slicni tagovi ostali netaktnuti.



Odličan predlog.
[ leka @ 23.02.2002. 11:38 ] @
Ne znam po cemu je odlican predlog? Ja ne vidim nista dobro u tome... Treba videti sta BB stavlja za code , ako stavlja CODE onda to izmeniti da bude PRE, ako ni PRE ne pomaze onda nam nece pomoci nista, osim da se napravi sistem da se BB-u nekako da na znanje da je taj kod C kod i da on pozove neki alat koji ce da sredi sve i prikaze kod kako valja...