如何返回指向字符数组中间某些内容的指针
How do I return a pointer to something in the middle of a char array?
如何返回指向字符数组中间的指针?
// 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 ' ';
}
你可以这样做
return &string[i];
或者像这样:
return string+i;
这是一回事。
返回 ' '
(一个等于零的char
常量)在逻辑上是不正确的:您应该为NULL
指针返回0
,或者如果您希望返回一个空的 C 字符串,您可以返回指向本地静态空字符串的指针,如下所示:
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;
}
如果你有一个指向字符串的指针,向它添加 N 将返回指向同一字符串部分的指针,从第 N 个字符开始(对于从零开始的计数)。
此外,最好为指向空字符串的指针提供一个常量。
static const char* EMPTY_STRING = ' ';
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;
}
正如@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] != ' '
if (string[i] == charToFind) {
return string + i;
}
}
return NULL;
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 2D数组来自文本输入,中间有空格
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- C 弦乐操作用指针,中间为空
- 使指针的中间;它有效吗?
- 使用指针数组存储阶乘计算的所有中间结果
- 如何返回指向字符数组中间某些内容的指针
- 在C++中获取Vector的一部分,类似于指向C数组中间的指针
- 从中间擦除,指针丢失
- 删除和替换catarray中间的对象指针
- 如果给定一个指向数组中间的指针,delete[]会做什么?