mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik liste stringoperationen in c


Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo hat jemand einen schönen Link für mich, wo die *ganzen* 
C-Funktionen wie strcmp() usw. aufgeführt sind?

Google ist ja mein bester Freund, aber ich finde immer nur C++ Listen 
oder halt Listen, die nicht vollständig sind, und nur 5 oder 6 
funktionen beschreiben.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der string.h von deinem Compiler steh alle drin... g

Für WinAVR bzw. avrlibc gibts: 
http://avr-libc.nongnu.org/user-manual/group__avr_...

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in diesem Falle ist es einerseits WINAVR
andererseits CCE für MSP430

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo P. schrieb:
> in diesem Falle ist es einerseits WINAVR
> andererseits CCE für MSP430

spielt keine Rolle.

* entweder haben beide Entiwcklungswerkzeuge die geforderte
  Funktionalität volständig implementiert, dann steht immer noch in 
jedem
  string.h eine identische Liste aller Funktionen

* oder ein System ist nicht vollständig. In dem Fall steht wiederrum
  in string.h die vollständige Liste für das jeweilige System


Aber eigentlich sollte in jeder halbwegs brauchbaren Literaturquelle 
eine vollständige Liste aller string.h - Funktionen drinnen sein. So 
viele sind es dann auch wieder nicht.

Ansonsten ist Google nach wie vor dein Freund und liefert zb das hier

http://home.fhtw-berlin.de/~junghans/cref/FUNCTION...

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok dann halt ne direkte Frage:

ich will alle 'T' aus einem string enfernen, welche fkt. nutze ich? in 
der angegebenen Liste habe ich leider keine Fkt. gefunden...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo P. schrieb:
> ok dann halt ne direkte Frage:
>
> ich will alle 'T' aus einem string enfernen, welche fkt. nutze ich? in
> der angegebenen Liste habe ich leider keine Fkt. gefunden...

Du wirst lachen:
Es gibt auch keine

Selber schreiben, ist doch mit dem Baukasten, den du an str... 
Funktionen hast kein allzugrosses Problem.
(Nb. eigentlich benötigt man dafür gar keine str... Funktionen. Einfach 
den Text von einem String in einen anderen umkopieren, wobei man bei 
einem 'T' einfach nichts umkopiert. Fertig. Ein 5-Zeiler)


Wenn du verstanden hättest, wie Strings in C funktioniern, wäre dir auch 
klar, dass es keine Standard-str... Funktion dafür geben kann. strtok 
ist schon grenzwertig genug. Keine str... Funktion kann einen 
übergebenen String verändern, ohne dass irgendein Sicherheitskonzept auf 
der Strecke bleibt. Die einzige Ausnahme strtok() schafft mehr Probleme 
als sie löst. Und strdup() ist auch nicht das gelbe vom Ei.

Fazit: Ohne Umgebungswissen aus deiner Applikation, ist jeder Versuch 
einen übergebenen String direkt beim Aufrufer zu verändern eine 
Harakiri-Aktion. Deshalb hat man es dann auch bei den str... Funktionen 
bleiben gelassen, so etwas anzubieten.

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich wusste nicht, dass es keine fertige ftk. gibt, aber deswegen 
direkt zu sagen:

Karl heinz Buchegger schrieb:
> Wenn du verstanden hättest, wie Strings in C funktioniern, ...

hm....

Ok, da ich nicht verstanden habe, dass solch eine fkt. nicht möglich 
ist, werde ich mir sie selber schreiben, fertig aus, Thema gegessen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo P. schrieb:
> Ok, ich wusste nicht, dass es keine fertige ftk. gibt, aber deswegen
> direkt zu sagen:
>
> Karl heinz Buchegger schrieb:
>> Wenn du verstanden hättest, wie Strings in C funktioniern, ...
>
> hm....
>
> Ok, da ich nicht verstanden habe, dass solch eine fkt. nicht möglich
> ist,

Da war ich vielleicht etwas zu restriktiv. Möglich ist es schon. Aber 
gefährlich.

Das Problem in C ist nun mal, dass es kein wirkliches 'String'-Konzept 
gibt, in welchem ein String ein eigenständiger Datentyp ist. Da ist das 
Problem wiederrum die dynamische Natur von Strings. C hat dafür nur ein 
Konzept: das dynamisch allokierte Array. Und das wäre zu weitreichend, 
als das man eine einfache Sprache wie C damit belasten wollte. Daher 
besteht String-Verarbeitung in C hauptsächlich aus einem Satz von 
Konventionen und einer Handvoll oft benötigter Funktionen, die diese 
Konventionen berücksichtigen.

Autor: Timo P. (latissimo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein string sieht etwa so aus

T-45  daraus wird dann später eine -22.5


meine Idee ist, hier eine fkt. zu schreiben, die alles in einem abwasch 
macht.
z.B.

int convert_temp(char* str)
{

}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo P. schrieb:
> mein string sieht etwa so aus
>
> T-45  daraus wird dann später eine -22.5
>
>
> meine Idee ist, hier eine fkt. zu schreiben, die alles in einem abwasch
> macht.
> z.B.
>
> int convert_temp(char* str)
> {
>
> }

Ja. Ist der Aufbau immer gleich oder kann es sein, dass das 'T' nicht 
vorkommt, bzw. noch was anderes davor steht.
int convert_temp( char* str )
{
  int number;

  number = atoi( str + 1 );  // erstes Zeichen ignorieren

  ...
}

oder
int convert_temp( char* str )
{
  int number;

  if( *str == 'T' )   // erstes Zeichen ist ein T: ignorieren
    str++;

  number = atoi( str );
  ...
}

oder
int convert_temp( char* str )
{
  int number;
  char* startOfNumber;

  // suche das erste 'T', gleich dahinter beginnt die Zahl
  // gibt es kein T, dann nimm alles
  startOfNumber = strchr( str, 'T' );
  if( startOfNumber )
    startOfNumber++;
  else
    startOfNumber = str;

  number = atoi( startOfNumber );

  ...
}


:-)
In keinem einzigen Fall musste ein Zeichen ersetzt oder gar aus dem 
String herausgelöscht werden. Letztendlich läuft alles nur darauf 
hinaus, den Startpointer für atoi richtig einzustellen.
:-)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dafür würde ich gar keine funktion nehmen, einfach mit einer for 
schleife durchgehen und immer wenn ein T kommt, weiter zählen.
char* s = "asdfsadfTAdfasT";

char* c1 = s;
char* c2 = s;

while( *c1 ) {
  if ( *c1 != 'T' ) {
     *c2 = *c1;
     c2++;
  } 
  c1++;
}
*c2 = 0;
(nicht getestet)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und mit do...while spart man sich *c2=0; zum Schluß...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.