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.
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__string.html
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/FUNCTIONS/funcref.html
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...
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.
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.
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.
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) { }
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.
1 | int convert_temp( char* str ) |
2 | {
|
3 | int number; |
4 | |
5 | number = atoi( str + 1 ); // erstes Zeichen ignorieren |
6 | |
7 | ...
|
8 | }
|
oder
1 | int convert_temp( char* str ) |
2 | {
|
3 | int number; |
4 | |
5 | if( *str == 'T' ) // erstes Zeichen ist ein T: ignorieren |
6 | str++; |
7 | |
8 | number = atoi( str ); |
9 | ...
|
10 | }
|
oder
1 | int convert_temp( char* str ) |
2 | {
|
3 | int number; |
4 | char* startOfNumber; |
5 | |
6 | // suche das erste 'T', gleich dahinter beginnt die Zahl
|
7 | // gibt es kein T, dann nimm alles
|
8 | startOfNumber = strchr( str, 'T' ); |
9 | if( startOfNumber ) |
10 | startOfNumber++; |
11 | else
|
12 | startOfNumber = str; |
13 | |
14 | number = atoi( startOfNumber ); |
15 | |
16 | ...
|
17 | }
|
:-) 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. :-)
dafür würde ich gar keine funktion nehmen, einfach mit einer for schleife durchgehen und immer wenn ein T kommt, weiter zählen.
1 | char* s = "asdfsadfTAdfasT"; |
2 | |
3 | char* c1 = s; |
4 | char* c2 = s; |
5 | |
6 | while( *c1 ) { |
7 | if ( *c1 != 'T' ) { |
8 | *c2 = *c1; |
9 | c2++; |
10 | }
|
11 | c1++; |
12 | }
|
13 | *c2 = 0; |
(nicht getestet)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.