liste stringoperationen in c

OP #1368323
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.
#1368336
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/FUNCTIONS/funcref.html
#1368345
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.
OP #1368365
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.
#1368369
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.
#1368409
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.
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.
:-)
Gast #1368411
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.
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren