如何返回指向char数组中间某些内容的指针?

时间:2013-10-30 15:39:25

标签: c++ string pointers

如何返回指向char数组中间某事的指针?

// Returns a pointer to the first occurrence of the given character in the
// given string.
const char* strchr(const char* string, char charToFind) {
    for (int i = 0; i < strlen(string); i++) {
        if (string[i] == charToFind) {
            return string[i]; // <== THIS IS WRONG, How do I fix this?
        }
    }
    return '\0';
}

3 个答案:

答案 0 :(得分:5)

你可以这样做

return &string[i];

或者像这样:

return string+i;

这是一回事。

返回'\0'char常量等于零,在逻辑上是不正确的:您应该为0指针返回NULL,或者如果您希望返回空C字符串,你可以返回一个指向本地 static 空字符串的指针,如下所示:

const char* strchr(const char* string, char charToFind) {
    for (int i = 0; i < strlen(string); i++) {
        ...
    }
    // Not found - return an empty string:
    static const char *empty = "";
    return empty;
}

答案 1 :(得分:1)

如果你有一个指向字符串的指针,向它添加N将返回指向同一字符串部分的指针,从第N个字符开始(对于从零开始的计数)。

此外,最好为指针指向空字符串。

static const char* EMPTY_STRING = '\0';

const char* strchr(const char* string, char charToFind) {
    for (int i = 0; i < strlen(string); i++) {
        if (string[i] == charToFind) {
            return string+i; 
        }
    }
    return EMPTY_STRING;
}

答案 2 :(得分:0)

正如@dasblinkenlight所提到的,&string[i]string + i都适用于返回指向字符串中间的指针。正如@Oliver Matthews所说,如果找不到该字符,你应该返回NULL。可能超出了原始查询的范围,但出于性能原因,您可能希望避免调用strlen(),并在扫描时检查字符串的结尾,如下所示:

const char* strchr(const char* string, char charToFind) {
    for (int i = 0; string[i]; i++) {    // Or you could say string[i] != '\0'
        if (string[i] == charToFind) {
            return string + i; 
        }
    }
    return NULL;
}