2016-10-04 6 views
-1

Warum gibt die folgende Funktion findString() die angegebenen Werte für die angegebenen Argumente zurück?brauchen Erklärung des Ergebnisses von findString() - Funktion zurückgegeben

findstring ("Text", "") den Wert 0 zurück

findstring ("", "text") -1 zurück.

findString ("", "") gibt -1 zurück.

Ich habe auf strstr nachgelesen und schaute auf andere Fragen und verstehe es einfach nicht.

// find s1 inside source, return index number if found, -1 if not found  

#include <stdio.h> 
#include <stdbool.h> 

int findString (const char source[], const char s[]) 
{ 
    int i, j, foundit = false; 

    // try each character in source 

    for (i = 0; source[i] != '\0' && !foundit; ++i) { 
     foundit = true; 

     // now see if corresponding chars from s match 

     for (j = 0; s[j] != '\0' && foundit; ++j) 
      if (source[j + i] != s[j] || source[j + i] == '\0') 
       foundit = false; 

     if (foundit) 
      return i; 
    } 

    return -1; 
} 

int main (void) 
{ 
    int index; 

    printf ("index = %i\n", findString("text", "")); 
    printf ("index = %i\n", findString("", "text")); 
    printf ("index = %i\n", findString("", "")); 

    return 0; 
} 
+0

Haben Sie versucht, mit dem Debugger durchzugehen? Welche IDE verwendest du? – Podo

+0

gcc, minGW und notepad – user6923395

+0

Ein flüchtiger Wert deutet darauf hin, dass die Funktion früh ausbrechen kann und dann -1 zurückgibt. Der räumliche Fall, der nach einer leeren Zeichenkette sucht, erscheint auch logisch. – usr2564301

Antwort

2
  • Der erste Aufruf gibt 0 weil ein leeren String kann in jeder Zeichenfolge mit dem Index Null gefunden werden (außer es ist ein Fehler im Code ist, siehe unten)
  • Der zweite Aufruf gibt -1, weil ein Nicht leere Zeichenfolge kann nicht in einer leeren Zeichenfolge gefunden werden
  • Der dritte Aufruf gibt -1 zurück, da ein Fehler in Ihrem Code ist: Wenn die äußere Schleife nicht eingegeben wird (dh die source Zeichenfolge ist leer), sollten Sie einen Sonderfall hinzufügen zurückgeben 0, wenn die Suchzeichenfolge s ist ebenfalls leer.
+0

@ user6923395 Die Rückkehr sollte 0, -1, 0 sein. – dasblinkenlight

0

Es gibt den Index des ersten Auftretens von s in source zurück. Wenn s in source nicht vorhanden ist, wird -1 zurückgegeben

Verwandte Themen