2017-01-09 3 views
-5

Ich habe einen Container mit ganzen Zahlen, aus denen ich einen bestimmten Wert v löschen möchte. Der Container kann mehr als eine Kopie von v enthalten, aber ich möchte nur die erste Instanz löschen, der ich begegne. Wie kann ich meinen Code reparieren, um dies zu erreichen?Wie lösche ich das erste Vorkommen von Wert im Array?

void delete (int s[] , int &top , int v) 
{ 
    int ts[size] ; 
    int ttop=-1; 
    while(top!=-1) 
    { 
     if(s[top]!=v) 
      push(ts,ttop,s[top]); 
     pop(top); 
    } 
    while(ttop!=-1) 
    { 
     push(s,top,ts[ttop]); 
     pop(ttop); 
    } 
} 
+1

Diese Frage macht keinen Sinn. Bitte lesen [wie man fragt] (http://stackoverflow.com/help/how-to-ask). –

Antwort

0

Sie müssen ein Flag definieren, das nach dem ersten Fund gesetzt wird.

void delete (int s[] , int &top , int v) 
{ 
    bool found = false; 
    int ts[size] ; 
    int ttop=-1; 
    while(top!=-1) 
    { 
     if (s[top]!=v) 
     { 
      push(ts,ttop,s[top]); 
     } 
     else 
     { 
      if (found == false) 
      { 
       found = true; 
       push(ts,ttop,s[top]); 
      } 
     } 
     pop(top); 
    } 
    while(ttop!=-1) 
    { 
     push(s,top,ts[ttop]); 
     pop(ttop); 
    } 
} 

Solange found falsch ist, wird es auch überprüfen, um zu sehen, ob das Element entspricht. Sobald found zutrifft, wird das Element immer eingeschlossen, auch wenn es übereinstimmt.

Beachten Sie, dass dies nicht der effektivste Weg ist, dies zu tun, nur ein Mittel zur Modifizierung Ihres Codes, so dass es den Trick macht.

+0

Ich möchte jedes Mal einen Wert löschen, nicht den gleichen Wert. – qqq

+0

@ M.ALi Tut mir leid. Es sollte jetzt stimmen. –

Verwandte Themen