5 Stimmen

Wie würde ich das Zeichen in diesem Beispiel mit strchr ersetzen?

/* strchr Beispiel */
#include 
#include 

int main ()
{
  char str[] = "Das ist ein Beispielsatz";
  char * pch;
  printf ("Suche nach dem Zeichen 's' in \"%s\"...\n",str);
  pch=strchr(str,'s');
  while (pch!=NULL)
  {
    printf ("gefunden bei %d\n",pch-str+1);
    pch=strchr(pch+1,'s');
  }
  return 0;
}

Wie könnte ich den str indizieren, sodass ich jedes 's' durch 'r' ersetze.

Danke.

9voto

Steve Jessop Punkte 264569

Sie müssen den String nicht indizieren. Sie haben einen Pointer auf das Zeichen, das Sie ändern möchten, also weisen Sie über den Pointer zu:

*pch = 'r';

Im Allgemeinen indizieren Sie jedoch mit []:

ptrdiff_t idx = pch - str;
assert(str[idx] == 's');

2voto

paxdiablo Punkte 809679

Sie können die folgende Funktion verwenden:

char *chngChar (char *str, char oldChar, char newChar) {
    char *strPtr = str;
    while ((strPtr = strchr (strPtr, oldChar)) != NULL)
        *strPtr++ = newChar;
    return str;
}

Es läuft einfach durch den String und sucht nach dem spezifischen Zeichen, um es durch das neue Zeichen zu ersetzen. Bei jeder Durchführung (wie auch bei Ihrer), beginnt es mit der Adresse eins über dem vorherigen Zeichen, um bereits überprüfte Zeichen nicht erneut zu überprüfen.

Es gibt auch die Adresse des Strings zurück, eine häufig verwendete Technik, damit Sie den Rückgabewert ebenfalls verwenden können, beispielsweise mit:

printf ("%s\n", chngChar (myName, 'p', 'P'));

1voto

Hernán Eche Punkte 5929
void reeplachar(char *buff, char old, char neo){
    char *ptr;        
    for(;;){
        ptr = strchr(buff, old);
        if(ptr==NULL) break; 
        buff[(int)(ptr-buff)]=neo;
    }        
    return;
}

Verwendung:

reeplachar(str,'s','r');

0voto

Jens Gustedt Punkte 74457

Unter der Voraussetzung, dass Ihr Programm tatsächlich die Positionen ohne Fehler durchsucht (ich habe nicht überprüft), wäre Ihre Frage, wie kann ich den Inhalt eines Objekts ändern, auf das mein Zeiger pch bereits zeigt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X