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.
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
intconvert_temp(char*str)
2
{
3
intnumber;
4
5
number=atoi(str+1);// erstes Zeichen ignorieren
6
7
...
8
}
oder
1
intconvert_temp(char*str)
2
{
3
intnumber;
4
5
if(*str=='T')// erstes Zeichen ist ein T: ignorieren
6
str++;
7
8
number=atoi(str);
9
...
10
}
oder
1
intconvert_temp(char*str)
2
{
3
intnumber;
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.
:-)