C++ 递增while循环中*char的指针

C++ 递增while循环中*char的指针,c++,string,loops,pointers,traversal,C++,String,Loops,Pointers,Traversal,以下是我所拥有的: char* input = new char [input_max] char* inputPtr = iput; 我想使用inputPtr遍历输入数组。但是,我不确定如何正确检查我是否已到达字符串的末尾: while (*inputPtr++) { // Some code } 或 还是更优雅的选项?假设输入字符串以null结尾: for(char *inputPtr = input; *inputPtr; ++inputPtr) { // some cod

以下是我所拥有的:

char* input = new char [input_max]
char* inputPtr = iput;
我想使用inputPtr遍历输入数组。但是,我不确定如何正确检查我是否已到达字符串的末尾:

while (*inputPtr++)
{
    // Some code
}


还是更优雅的选项?

假设输入字符串以null结尾:

for(char *inputPtr = input; *inputPtr; ++inputPtr)
{
  // some code
}
char* input = new char [input_max];
for (char* inputPtr = input; inputPtr < input + input_max; 
        inputPtr++) {
  inputPtr[0]++; 
}   
请记住,您发布的示例可能不会给出您想要的结果。在while循环条件下,始终执行后期增量。当您在循环中时,您已经传递了第一个字符。举个例子:

#include <iostream>
using namespace std;

int main()
{
  const char *str = "apple\0";
  const char *it = str;
  while(*it++)
  {
    cout << *it << '_';
  }
}
#包括
使用名称空间std;
int main()
{
const char*str=“苹果\0”;
const char*it=str;
而(*it++)
{

cout假设输入不是以null结尾的:

for(char *inputPtr = input; *inputPtr; ++inputPtr)
{
  // some code
}
char* input = new char [input_max];
for (char* inputPtr = input; inputPtr < input + input_max; 
        inputPtr++) {
  inputPtr[0]++; 
}   
但一般来说,这是你能得到的最好的选择。使用
std::vector
std::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循环。这是个人的选择


注意,在两个示例中,您都在测试当前位置,然后递增。因此,您正在使用下一个字符!

它们是等效的。当然,您必须确保数组中确实存在
\0
。这是一个在数组中放置什么的问题。您确定有
'\0'
元素吗数组中是否有ent?如果有,是否确定
'\0'
元素在数组的边界内?我是编程新手,因此,请原谅,我要问的是冗余的,但是'\0'==0?“\0'==0”吗-是的..@juanchopanza那么这是否意味着while语句在被解引用后首先检查inputPtr的值,然后增加存储在inputPtr中的内存地址??(我对指针还是新手,所以在这个问题上我会感到困惑)什么时候输入不是以null结尾的?不是所有的东西都是字符串。这可以是数字的向量,或者某种表格,在这种情况下null只是另一个值我还没有学会向量,但是要记住,谢谢!如果我坚持我的示例,那么做一段时间会更合适吗?做一段时间意味着:执行后测试某些代码,因此,至少执行一次循环。如果您想考虑<代码> \0 < /COD>字符,这可能是有用的。但是,这将不等同于您的示例。