Thomas Stenhaug wrote in message ...
>"Torkel Bjørnson" <tor...@na.no> writes:
>
>> Noen komentarer?
>
>Hva med noe slikt?
>
>/* terminate s at newline (remove newline) */
>void rmnl(char *s)
>{
> while (*s)
> if (*s == '\n')
> *s = '\0';
> else
> s++;
> }
>}
Jepp, det var akkurat noe slik jeg var ute etter. Jeg er vant til å
programmere i assembler, så dette faller meg mer naturlig.
Takker. Hilsen Torkel
Erik Naggum wrote in message <31070213...@naggum.no>...
>* Torkel Bjørnson
>| Jeg prøver å fjerne linjeskift fra en tekst streng.
>
> la meg anta at du mener at du skal fjerne det siste tegnet i en streng
> dersom dette er en newline. noe annet gir ikke videre mening slik du
> viser frem kode og ser ut til å tenke, men hvis det er feil må du bare si
> fra og formulere deg litt bedre. (svært ofte vil det å formulere seg
> godt på et naturlig sprog medføre at du kan formulere løsningen i et
> programmeringssprog, også.)
Wow! Du kan se tankene mine !!! Nå får jeg sikkelig noia :))
> anta en char * line og en int len = strlen (line). nå vil line[len-1]
> enten være en newline ('\n') eller noe annet, og line[len] vil være end
> of string marker (0). dersom tegnet er newline, kan vi skrive over det
> med en end of string marker slik at line[len-1] er end of string marker,
> og dermed er strengen ett tegn kortere, nemlig vår kjære newline.
>
>if (line[len-1] == '\n') line[--len] = 0;
Hm... ja, dette er vel den beste måten.
Under DOS (muligens også Windows) må du sende carrage return & line feed for
å flytte currsoren til neste linje. Jeg trodde derfor at \n kunne bestå av
mere en 1 byte avhengig av hvilket OS man kompilerte koden for...
> dette er naturligvis en destruktiv operasjon (dvs, den modifiserer et
> objekt som kan pekes til av vilkårlig mange pekere, fremfor å lage et
> nytt objekt), og du bør derfor helst vite at du har eiendomsrett til
> dataene line peker på/inneholder. i motsatt fall bør du kalle strdup
> først og modifisere kopien (og huske å frigjøre memory strdup bad om).
Nja, når dillemaet sikkerhet / hastighet melder seg, går jeg for hastighet!
Sinden alt minne blir frigitt når programmet avsluttes, er det vel ikke vits
i å frigi f.eks 10 byte allokert av strdup. Så fremt programmet er relativt
lite, og du ikke bryr deg om
> (og neste øvelse blir å fjerne linjer fra signaturen din til den blir
> fire linjer lang...)
:)
---
Peace, love & empathy from Torkel Bjørnson
It is difficult to be simple, but it is simple to be difficult and complex.
> * Torkel Bjørnson
> | Jeg prøver å fjerne linjeskift fra en tekst streng.
>
> la meg anta at du mener at du skal fjerne det siste tegnet i en streng
> dersom dette er en newline. noe annet gir ikke videre mening slik du
> viser frem kode og ser ut til å tenke, men hvis det er feil må du bare si
> fra og formulere deg litt bedre. (svært ofte vil det å formulere seg
> godt på et naturlig sprog medføre at du kan formulere løsningen i et
> programmeringssprog, også.)
>
> anta en char * line og en int len = strlen (line). nå vil line[len-1]
> enten være en newline ('\n') eller noe annet, og line[len] vil være end
> of string marker (0). dersom tegnet er newline, kan vi skrive over det
> med en end of string marker slik at line[len-1] er end of string marker,
> og dermed er strengen ett tegn kortere, nemlig vår kjære newline.
>
> if (line[len-1] == '\n') line[--len] = 0;
>
Når man først har tatt på seg oppgaven å til de grader være i det belærende
hjørnet kan man kanskje også nevne at det er en god programmeringsskikk å
posisjonere rvalue på venstre side av logiske operatorer og lvalue på høyre
side. For eksempel som følgende:
if ('\n' == line[len-1]) line[--len] = 0;
Ved å følge denne regelen vil man aldri oppleve feil av typen tildeling, og alt
det dette måtte før med seg, på grunn av en eventuell "liten" skrivefeil.
Mangen kompilatorer har et varselnivå for slike feil, men ikke alle. Noen
ganger kan det også være svært vanskelig å vite om det faktisk evt. skal være
et tildelingstegn der eller ei, og spesiellt hvis man ikke har skrevet
kildekoden selv. Normalt sett er det en uting å bruke tildelingstegn hvor
resultatet av uttrykket skal være bool'sk, men mangen programmerere gjør det
for enkelthetskyld. Uansett, spar deg selv og andre for eventuelle problemer og
bruk konsekvent rlvalue på venstre side som omtalt.
- gb -
sist vi hørte fra deg, hadde du endel å fortelle om psykopater og om
trolling, noe du virkelig har vist deg som ekspert på, i praktisk
førstehåndsforstand. hvorfor har du begynt å lufte det sinnsyke hodet
ditt her påny? har du fått noen nye medisiner som gjør at du ikke lenger
ser psykopater og troll ved høylys dag, kanskje? eller er du ute på
prøve? isåfall, hvor smart er det av deg å begynne prøveløslatelsen din
med å provosere på samme klart paranoide måten som forrige gang?
gå vekk, Geir Bjarte Terum. eller plag ihvertfall noen andre.
#:Erik
--
http://www.naggum.no/spam.html is about my spam protection scheme and how
to guarantee that you reach me. in brief: if you reply to a news article
of mine, be sure to include an In-Reply-To or References header with the
message-ID of that message in it. otherwise, you need to read that page.
det tar litt tid å innarbeide den der, men det er en smart ting å
gjøre. tilordningsfeil kan være fryktelig vanskelige å oppdage hvis
du er uheldig.
-Bjørn
--
Bjørn Borud <bo...@guardian.no> | "The Net interprets censorship
<URL:http://www.pvv.unit.no/~borud/> | as damage and routes around it."
UNIX person, one of "them" | - John Gilmore