2010-07-10 3 views
23

문자열이 "qwerty"이고 그 안에 e 문자의 색인 위치를 찾고 싶다고 가정합니다. (이 경우 색인은 2 일 것입니다.)C에서 문자열 내의 문자 색인을 찾는 방법은 무엇입니까?

C에서 어떻게합니까?

나는 strchr 함수를 찾았지만 인덱스가 아닌 문자에 대한 포인터를 반환합니다.

char *string = "qwerty"; 
char *e; 
int index; 

e = strchr(string, 'e'); 
index = (int)(e - string); 
+0

가능한 중복 C] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

답변

47

그냥 어떤 strchr과 수익률에서 문자열 주소를 뺍니다.

+0

down-voter : 코드에 문제가 있습니까? – wj32

+0

이것은 "옳다"지만 이론적으로는 무서운 것이지만 표준에서 문자열의 길이를 멈추게하는 것은 평범한 'int'의 용량을 훨씬 초과합니다. C99에 의존 할 수 있으면 stintint.h에 정의 된 uintptr_t를 사용하십시오. 또한 캐스팅의 필요성을 제거해야합니다. –

+4

포인터 차이의 결과는 ptrdiff_t입니다. – Nyan

3
void myFunc(char* str, char c) 
{ 
    char* ptr; 
    int index; 

    ptr = strchr(str, c); 
    if (ptr == NULL) 
    { 
     printf("Character not found\n"); 
     return; 
    } 

    index = ptr - str; 

    printf("The index is %d\n", index); 
    ASSERT(str[index] == c); // Verify that the character at index is the one we want. 
} 

이 코드는 현재 테스트되지 않은이지만, 적절한 개념을 보여줍니다

4

사용할 수도 있지만 가능한 여러 개의 문자를 검색 할 수 있으므로 훨씬 느립니다. strchr을 사용하고 포인터를 빼는 것이 가장 좋은 방법입니다.

0

무엇에 대해 : 당신은 그냥 문자열을 *에서 작동 할 수 상관하지 않는 경우

char *string = "qwerty"; 
char *e = string; 
int idx = 0; 
while (*e++ != 'e') idx++; 

복사 원래 문자열을 유지하기 위해 전자, 나는 가정

[경우 String.indexOf 기능에서의