这是我所拥有的:
char* input = new char [input_max]
char* inputPtr = iput;
我想使用 inputPtr 来遍历输入数组。但是我不确定什么会正确检查我是否已经到达字符串的末尾:
while (*inputPtr++)
{
// Some code
}
或者
while (*inputPtr != '\0')
{
inputPtr++;
// Some code
}
或更优雅的选择?
假设输入字符串以 null 结尾:
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__
注意缺少的第一个字符和_
末尾的额外下划线。如果您对预增量和后增量运算符感到困惑,请查看此相关问题。
假设输入不是空终止的:
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
, orstd::string
可能会启用更简洁和更优雅的选项。
我会做:
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).
}
这相当于greatwolf建议的for循环。这是个人选择。
请注意,对于您的两个示例,您都在测试当前位置,然后增加。因此,您正在使用下一个字符!