strcspn()

strcspn ist definiert in der 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 <string.h>
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 <stdio.h>
#include <string.h>
#include <stdlib.h>
 
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