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>字符,这可能是有用的。但是,这将不等同于您的示例。