====== strcspn() ====== strcspn ist definiert in der ''[[start|string]]'', die in C über ''string.h'', bzw. in C++ über ''cstring'' eingebunden wird. ===== Funktion ===== strcspn() sucht nach dem ersten Auftreten eines Zeichens. Es kann eine ganze Folge von Zeichen gleichzeitig gesucht werden, die gesuchten Zeichen werden in Form eines Strings an die Funktion übergeben. Wird eins der Zeichen im Suchstring entdeckt, so endet die Suche und es wird die Position des gefundenen Zeichens zurückgegeben. Wird kein Zeichen gefunden, so gibt strcspn() die Länge des Strings zurück: Es wurde das Null-Byte gefunden. ===== Signatur ===== #include size_t strcspn( char const * string, char const * characters ); **string**: Der zu durchsuchende String \\ **characters**: Eine Zeichenkette mit Zeichen, die im ''string'' gesucht werden. \\ **Return value**: Ein [[size_t]], das die Position des Zeichens im Suchstring angibt, das auch in ''characters'' auftaucht. ===== Fehlerquellen ===== Beide Strings müssen mit einen Nullbyte enden. ===== Beispiel ===== #include #include #include int main () { char str[] = "http://www.proggen.org/drawer/page.html"; char regardServer[] = ".:/"; char ignoreServer[] = ":/"; char * keys = regardServer; char * description; int l = strlen( str ); int pos = -1, oldpos; while( pos < l ) { oldpos = pos + 1; pos = oldpos + strcspn( &str[oldpos], keys ); char item = str[pos]; str[pos] = '\0'; switch( item ) { case ':': description = "Protocol"; pos += 2; // ignore the '//'; break; case '.': description = "Server"; break; case '/': if( keys == regardServer ) // TopLevel-Domain vor dem ersten Verzeichnis { keys = ignoreServer; // nach dem ersten Verzeichnis kommt keine Server-Information mehr, Punkte gehören nun zum File oder Verzeichnis description = "TopLevelDomain"; } else description = "Drawer"; break; case '\0': if( keys == regardServer ) // TopLevel-Domain vor dem ersten Verzeichnis { keys = ignoreServer; // nach dem ersten Verzeichnis kommt keine Server-Information mehr, Punkte gehören nun zum File oder Verzeichnis description = "TopLevelDomain"; } else description = "File"; break; } printf( "%s: %s (Position: %d-%d/%d)\n", description, &str[oldpos], oldpos, pos, l ); if( !pos ) break; } return EXIT_SUCCESS; } **Ausgabe:** Protocol: http (Position: 0-6/39) Server: www (Position: 7-10/39) Server: proggen (Position: 11-18/39) TopLevelDomain: org (Position: 19-22/39) Drawer: drawer (Position: 23-29/39) File: page.html (Position: 30-39/39) ===== siehe auch ===== [[c:lib:string:start|string]]: [[c:lib:string:strpbrk|strpbrk()]], [[c:lib:string:strspn|strspn()]], [[c:lib:string:strstr|strstr()]], [[c:lib:string:strcmp|strcmp()]], [[c:lib:string:strncmp|stncmp()]]