2017-03-08 5 views
0

Ich möchte die Position eines Zeichens in einer Zeichenfolge abrufen, indem ich nach dem Zeichen in der Zeichenfolge suchen strchr und das in einem Zeiger *p speichern. So zum Beispiel:Position eines Zeichens in einer Zeichenfolge mit einem Zeiger abrufen

char v[] = "abcdefghijklmnopqrstuvwxyz", *p; 
p = strchr(v, 'c'); 

In diesem speziellen Szenario würde halten die p Zeiger den Wert 2 weil c seine Position 2 innerhalb des Strings?

+2

Wie hat das ein "oop" -Tag? :) –

Antwort

0

Wie andere Antworten zeigen, dass die Adresse von c zurückkehrt, ein schneller Test wäre es aus dem Wert macht Druck:

wie so:

std::cout << p << std::endl; 
std::cout << *p << std::endl; 
std::cout << p - v << std::endl; 

Die Ergebnisse, die Sie erhalten werden, sind:

cdefghijklmnopqrstuvwxyz 
c 
2 
3

Nein. Es gibt Ihnen die Adresse des Elements an dieser Position.

p - v (die Differenz zwischen zwei Zeigern) haben den Wert 2, und Typstd::ptrdiff_t.

Der Typ ist wichtig: Es ist garantiert, dass eine ausreichende Größe vorhanden ist, um die Differenz zwischen zwei Zeigern zu speichern.

2

Unter Berufung auf die documentation:

Returns: Ein Zeiger auf das erste Auftreten des Charakters in Str. Wenn das Zeichen nicht gefunden wird, gibt die Funktion einen Nullzeiger zurück.

Das ist irgendwie selbsterklärend. Es gibt keine Position zurück, sondern eine Adresse.

Wie @Bathsheba sagte, können Sie Zeigerdifferenz verwenden, um die tatsächliche Position in einer Zeichenfolge zu berechnen. Oder verwenden Sie stattdessen std::distance.

0

Rückgabewert: Zeiger auf das gefundene Zeichen in str oder Nullzeiger, wenn kein Zeichen gefunden wird.

In Ihrem Fall wird p ein Zeiger sein, der auf den Speicherort von c zeigt.

std::cout << p; 

Ausgang:

cdefghijklmnopqrstuvwxyz 
Verwandte Themen