这就是我所拥有的:
char* input = new char [input_max]
char* inputPtr = iput;
我想使用inputPtr遍历输入数组。但是我不确定什么会正确检查我是否已到达字符串的末尾:
while (*inputPtr++)
{
// Some code
}
或
while (*inputPtr != '\0')
{
inputPtr++;
// Some code
}
还是更优雅的选择?
答案 0 :(得分:9)
假设输入字符串以空值终止:
for(char *inputPtr = input; *inputPtr; ++inputPtr)
{
// some code
}
请注意,您发布的示例可能无法提供您想要的结果。在while循环条件下,您始终执行后增量。当你进入循环时,你已经传递了第一个角色。举个例子:
#include <iostream>
using namespace std;
int main()
{
const char *str = "apple\0";
const char *it = str;
while(*it++)
{
cout << *it << '_';
}
}
输出:
p_p_l_e __
注意最后丢失的第一个字符和额外的_
下划线。如果您对预增量和后增量运算符感到困惑,请查看this related question。
答案 1 :(得分:2)
假设输入未终止:
char* input = new char [input_max];
for (char* inputPtr = input; inputPtr < input + input_max;
inputPtr++) {
inputPtr[0]++;
}
表示空终止的情况:
for (char* inputPtr = input; inputPtr[0]; inputPtr++) {
inputPtr[0]++;
}
但一般情况下这是你能得到的。使用std::vector
或std::string
可以实现更清晰,更优雅的选项。
答案 2 :(得分:2)
我愿意:
inputPtr = input; // init inputPtr always at the last moment.
while (*inputPtr != '\0') { // Assume the string last with \0
// some code
inputPtr++; // After "some code" (instead of what you wrote).
}
这相当于巨狼建议的for-loop。这是个人选择。
小心,在两个示例中,您正在测试当前位置,然后递增。因此,您正在使用下一个角色!