"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

bestimmte zeichen aus C string entfernen

bBU.CyTrobIc 25.02.2005 - 16:20 16371 14
Posts

bBU.CyTrobIc

#include "billrulz.h"
Avatar
Registered: Oct 2000
Location: Hamburg
Posts: 1875
ich frag einfach mal :-P

also ich habe ein kleines C Programm geschrieben, wo ich eine textdatei zeilenweise auslese.

ich möchte aber jetzt das aus diesen zeilen alle sonderzeichen und das minus (-) verschwindet. str_replace wie in PHP gibts ja leider nich in C :lol:

jemand ne idee ?

thx

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
per schleife alle zeichen durchgehen und alle gültigen zeichen in einen neuen string übernehmen.

bBU.CyTrobIc

#include "billrulz.h"
Avatar
Registered: Oct 2000
Location: Hamburg
Posts: 1875
tjo soweit bin ich auch :)

nur wie, schleife is klar nur hab ich:

variable = "dies-ist-ein-kleiner-text";

wie soll ich in dem string zeichen für zeichen durchgehen ? oO

thx 4 help

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
da musst du c lernen, weil das ist schon ziemlich grundlegendes wissen.

trotzdem, hier in der unoptimiertesten form ever:
Code:
char source[] = "dies-ist-ein-kleiner-text",
       *temp    = new char[strlen(source)];

int j = 0;
for (int i=0;i != strlen(source);i++)
{
  if (source[i] == '-')
   continue;

  temp[j++] = source[i];
}

temp[j] = 0;

char *output = strdup(temp);

das ist rohform und soll zu einem denkanstoss beitragen.

Master99

verträumter realist
Avatar
Registered: Jul 2001
Location: vie/grz
Posts: 12683
Zitat von bBU.CyTrobIc
ich möchte aber jetzt das aus diesen zeilen alle sonderzeichen und das minus (-) verschwindet. str_replace wie in PHP gibts ja leider nich in C :lol:

kommt drauf an was du hier jetzt unter "c" verstehst.... wenn es wirklich reines c ohne schnickschnack is, dann hast du recht, aber ne replace-fkt gibts in der mfc oder .net natürlich genauso.

bBU.CyTrobIc

#include "billrulz.h"
Avatar
Registered: Oct 2000
Location: Hamburg
Posts: 1875
@master99
jo reinstes c

@mat
dank dir, ich teste mal n bischen damit rum
hab halt nur noch php im kopf daher das unwissen... man vergisst so schnell :)

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
Zitat von bBU.CyTrobIc
hab halt nur noch php im kopf daher das unwissen... man vergisst so schnell :)

also sowas vergisst man bestimmt nicht wenn man irgendwann mal auch nur hablwegs c konnte.

samuel

.:: unnahbar ::.
Avatar
Registered: Jul 2000
Location: hagenberg
Posts: 2680
Zitat von bBU.CyTrobIc
variable = "dies-ist-ein-kleiner-text";

wie soll ich in dem string zeichen für zeichen durchgehen ? oO

wtf? du hast ja offensichtlich ueberhaupt keine ahnung was ein string in C ist?


ich empfehle "the c programming language" von kernigham & ritche

sollte wunder bewirken...

sam

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5020
hehe true, schöner wäre noch gewesen $varibale ="dies ist ein kleiner test" :D

d3cod3

Legend
...
Avatar
Registered: Aug 2002
Location: insert location ..
Posts: 15288
Zitat von samrider
ich empfehle "the c programming language" von kernigham & ritche

sollte wunder bewirken...

sam

kann ich zustimmen, einmal da durch und es gibt mal wesentlich weniger fragen.

EG

thinking with portals
Avatar
Registered: May 2004
Location: 11**
Posts: 3918
naja wenn er schon aus files auslesen kann wirda ned soo dumm sein! ;)

also wie oben schon erwähnt:

zeile auslesen und in string rein
string zeichenweise durchgehn und mit switch alle ungültigen zeichen überprüfen

sobald das ding am ende ist ('\0' ...strings in c sind ja bekanntling null-terminiert!) weiterverarbeiten (wie auch immer du das machen willst)!

und dann nächste zeile auslesen das selbe spiel nochmal!
bis fread 'EOF' zurück gibt (end of file)!

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
ganz ohne zusätzlichen puffer geht es zb so:
Code:
void strremove(char* source,char ch) { 
        char* target=source;
        for (;(*target=*source)!=0;source++)
                if (*target!=ch) target++;
}

bBU.CyTrobIc

#include "billrulz.h"
Avatar
Registered: Oct 2000
Location: Hamburg
Posts: 1875
hab schon was anderes gemacht :)

btw: ich bin nich blöd, mir fallen halt ab und zu die einfachsten sachen nicht mehr ein...

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
@mat, ja wie schön dass das grundlegendes is, das kenn ich noch nichteinmal und dabei soll ich nächstes jahr µcontroller programmieren! :bash:

Ich hätte es so gemacht:
Schleife durchlaufen lassen
Dann if die jedes zeichen einzeln überprüft
dann fehlt ma da plan weil ich nicht weiß wie ich die zeichen alle um ein feld weiter vor rücke

aber ich glaube das dürfte so ziemlich genau auf des rauskommen was mat hat

ah mir ist gerade eine lösung eingefallen für mein problem:
man kopiert einfach die zulässigen buchstaben in einen neuen string :)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Burschi1620
@mat, ja wie schön dass das grundlegendes is, das kenn ich noch nichteinmal und dabei soll ich nächstes jahr µcontroller programmieren! :bash:
Gottseidank ist die Welt ungerecht.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz