Ankündigung

Einklappen
Keine Ankündigung bisher.

Stringüberprüfung in C

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Stringüberprüfung in C

    Hallo,

    ich würde gerne einen String auf einen http:// link überprüfen. Der String soll eingelesen werden, dann soll geprüft werden ob irgendwo im String ein Link enthalten ist und der Link dann ausgegeben werden.

    Leider weiß ich nicht so genau wie ich das anstellen soll. Wenn jemand einen Tip hat bitte melden

  • #2
    Schau dir mal diese Links an.




    grz zer00

    Kommentar


    • #3
      Hallo Marder

      Versuchs mal mit der "strstr()" Funktion der "string.h" Header Datei. Hier ein Beispiel:

      #include <stdio.h>

      int main(int argc, char* argv[]) {
      char stringA[] = {"Das ist ein Link: http://www.informatikboard.ch"};
      char stringB[] = {"http://"};

      if (strstr(stringA, stringB) == NULL) printf("Der String hat keinen Link!\n");
      else printf("Der String besitzt einen Link.\n");

      return 0;
      }

      Kommentar


      • #4
        hallo, also der vergleich funktioniert einwandfrei. aber man merkt das ich mich lang netmehr mit c beshcäftigt hab
        werd jetzt mal schaun das ich es irgendwie hinbekomme das er den link dann acuh ausliest.

        Kommentar


        • #5
          #include "stdlib.h"
          #include "stdio.h"

          char* getLink(const char* strwithLink) {
          char *startl, *endl, *link;

          startl = strstr(strwithLink, "http://");
          if (startl == NULL) return NULL;
          endl = strstr(startl, " ");
          if (endl == NULL) endl = (char*)((int)strwithLink + strlen(strwithLink));

          link = (char*) malloc(endl - startl);
          if (link == NULL) return NULL;
          strncpy(link, startl, endl - startl);

          return link;
          }


          int main(int argc, char* argv[]) {
          char stringA[] = {"Das ist ein Link: http://www.informatikboard.ch"};
          char* res;

          res = getLink(stringA);

          if (res == NULL) printf("Der String hat keinen Link!\n");
          else printf("Der String besitzt einen Link: %s\n", res);

          free(res);
          return 0;
          }

          Kommentar


          • #6
            Super,

            also dein Programm überprüft ja ob ein Link vorhanden ist und gibt dann alles bis zu einem Leerzeichen als Link aus.
            Bei ein paar Sachen bin ich mir aber nicht ganz sicher was da gemacht wird.

            Code:
            if (endl == NULL) endl = (char*)((int)strwithLink + strlen(strwithLink));
            
            link = (char*) malloc(endl - startl);
            kannst du mir die beiden zeilen mal etwas erläutern?

            vielen dank!

            Kommentar


            • #7
              Also, die erste Zeile behandelt den Fall, wenn der Link ganz am Ende des Strings ist und somit keinen Leerzeichen mehr hat. Leider berücksichtigt "strstr()" nicht das Nullbyte am schluss.
              Auf der zweiten Zeile reserviere ich ganz normal Speicher, um den erhaltenen String separat zurückzugeben.

              Kommentar


              • #8
                ok, bei mir gibt er allerdings nach der ausgabe des links immer noch eine geschweifte klammer aus...wo kommt die denn noch her?

                Kommentar


                • #9
                  Hast Du Copy & Paste meines Codes gemacht, oder schon etwas verändert? Füge noch bei der Subtraktion "endl - startl" ein "+1" dazu, also "endl - startl + 1". Wahrscheinlich kommt die geschweifte Klammer, weil das NullByte nicht kopiert wurde. 8)

                  Kommentar


                  • #10
                    So hier eine korrigierte Fassung:

                    #include "stdlib.h"
                    #include "stdio.h"

                    char* getLink(const char* strwithLink) {
                    char *startl, *endl, *link;

                    startl = strstr(strwithLink, "http://");
                    if (startl == NULL) return NULL;
                    endl = strstr(startl, " ");
                    if (endl == NULL) endl = (char*)((int)strwithLink + strlen(strwithLink));

                    link = (char*) calloc(endl - startl + 1, 1);
                    if (link == NULL) return NULL;
                    strncpy(link, startl, endl - startl);

                    return link;
                    }


                    int main(int argc, char* argv[]) {
                    char stringA[] = {"Das ist ein Link: http://www.informatikboard.ch"};
                    char* res;

                    res = getLink(stringA);

                    if (res == NULL) printf("Der String hat keinen Link!\n");
                    else printf("Der String besitzt einen Link: %s\n", res);

                    return 0;
                    }

                    Kommentar


                    • #11
                      Soweit hatte ich es jetzt auch hinbekommen. ^^ Ich versuche jetzt gerad das alles in einzelnen Etappen untersucht wird, damit ich überprüfen kann ob alle benötigten Teile der URL vorhanden sind. (http://(www oder subdomain.)
                      domain.rootdomain)

                      Kommentar


                      • #12
                        ich bins leider nochmal, hab jetzt eine woche keine zeit gehabt muss das prog aber leider bald abgeben. so richtig zurecht komme ich allerdings nicht wirklich. Ich muss wie oben schon beschrieben einen String auf einen Link überprüfen. Der Link muss dann noch überprüft werden ob er gültig ist. D.H. es darf kein ".." vorkommen, der link muss auf htm, html oder php enden (mehr muss nicht überprüft werden), es dürfen keine sonderzeichen vorkommen etc.

                        leider gibt es ja dann eine nahezu endlose kette an if schleifen, zumindest wenn ich es mit meinen programmierkenntnissen versuche

                        kennt jemand von euch vielleicht einen guten weg das hin zu bekommen?

                        Ich bin für jede Hilfe dankbar.

                        Mein derzeitiger Stand sieht folgendermaßen aus:
                        Code:
                        #include <stdio.h>
                        #include <string.h> 
                        #include <conio.h> 
                        #include <stdlib.h> 
                        #include <ctype.h>
                        
                        char* linkAuslesen(const char* uebergabeLink) {
                        char *linkAnfang, *test, *linkEnde, *link;
                        
                        
                        linkAnfang = strstr(uebergabeLink, "http://"); //Im übergebenen String wird nach dem Anfang einer URL gesucht und der Pointer an diese Stelle gesetzt
                        if (linkAnfang == NULL) return NULL;           //Wenn kein Link vorhanden ist wird abgebrochen        
                        linkEnde = strstr(linkAnfang, " ");            //Das Linkende wird durch ein Leerzeichen bestimmt  
                        if (linkEnde == NULL) linkEnde = (char*)((int)uebergabeLink + strlen(uebergabeLink)); //Überprüfung ob Linkende mit Ende des Strings übereinstimmt und evtl. kein Leerzeichen mehr kommt
                        
                        link = (char*) calloc(linkEnde - linkAnfang + 1,1);  //Speicher wird reserviert
                        
                        strncpy(link, linkAnfang, linkEnde - linkAnfang);   //Der endgültige Link wird zusammengesetzt
                        
                        printf("\nLink: %s\n", link);                  //Testausgabe
                        
                        return link;
                        }
                        
                        
                        int main(int argc, char* argv[]) {
                        int i = 0;
                        
                        char stringA[]={"WWWWW asfasjfna [url]http://www.t-online.de[/url] ist ein link"};
                        
                        
                        char* ErgebnisURL;
                        
                        ErgebnisURL = linkAuslesen(stringA); //Funktion wird aufgerufen und der String wird als Parameter übergeben
                        
                        for (i = 0; i <= strlen(ErgebnisURL)-1; i++)
                        {
                            if(isprint(ErgebnisURL[i]) != 0)
                            {
                                printf("\n%c ist ein druckbares Zeichen",ErgebnisURL[i]);
                            }
                            else
                            {
                                printf("\nDie URL ist ungueltig! Ein nicht druckbares Zeichen (%c) an Stelle (%i) wurde gefunden!", ErgebnisURL[i], i);
                            }
                        }
                        
                        
                        
                        
                        int y=0;
                        int punkte[10]; //ARRAY an dessen Stellen sich Punkte befinden
                        
                        for (i = 0; i <= strlen(ErgebnisURL); i++)
                        {
                            if(ErgebnisURL[i] == '.')
                            {
                                punkte[y] = i;
                                printf("\n%c ist ein Punkt an Stelle (%i)",ErgebnisURL[i],punkte[y]);
                                y++;  
                                        
                                if(ErgebnisURL[i+1] == '.')
                                {
                                    printf("\nDie URL ist ungueltig! Es sind 2 Punkte hintereinander!!");
                                    exit(0);
                                }
                                else
                                {
                                    printf("\n.. Ueberpruefung Ueberstanden!");
                                }
                            }
                        }
                        
                        
                        
                        return 0;
                        }
                        Für die Art der Programmierung nicht schlagen, hab mit C net viel am Hut ^^

                        Vielen Dank im Vorraus,

                        Michael

                        Kommentar


                        • #13
                          Klassischer Fall für Regular Expressions
                          Falls Du unter Linux, oder ein anderes Unix, arbeitest kannst Du die Funktionen aus der "regex.h" verwenden.

                          Kommentar


                          • #14
                            arbeite unter windows...werd aber nachher mal auf nem linux rechner probieren, danke!

                            Kommentar


                            • #15
                              kann man eigentlich irgendwie unter windows den befehl wait(x) in ein c-prog einbauen?

                              Kommentar

                              Lädt...
                              X