为什么这种遍历字符串的方法是错误的?【问题已解决!谢谢各位】
假设有个字符串:
char str[] = "hello world!"; (对原问题的修改)
第一种遍历方法:
int i = 0;
int length = 0;//统计字符串的长度
while(str[i] != '\0'){
++length;
++i;
} 第二种遍历方法:
int length = 0;
while(*str != '\0'){//指针方式遍历
++length;
++str;
} 其中,第一种方式经验证是正确的,第二种方法似乎有问题,请问牛油+牛大大们,第二种遍历字符串的方式那里出错了啊? ====================================================一下为补充==============================
谢谢大家的回复,但是我的纠结不是数组名与指针的关系,数组名能不能加之类的。我是在做《剑指offer》第二题---替换空格中遇到这样的问题:该题的函数接口为:void replaceSpace(char *str,int length),其中有个操作就是遍历传入的str,我开始使用的是第二种方法,但是这样是错误的,使用第一种方法就被AC了。
=====================================贴代码来的直接======================================
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL || length <= 0)
return ;
int originallength = 0;
int blanklength = 0;
int i = 0;
while(str[i] != '\0'){
++originallength;
if(str[i] == ' ')
++blanklength;
++i;
}
int newlength = originallength + blanklength*2;
if(newlength > length)
return ;
int p1 = originallength;
int p2 = newlength;
while(p1 >= 0 && p1 < p2){
if(str[p1] == ' '){
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}
else{
str[p2--] = str[p1];
}
-- p1;
}
}
};
这是AC的代码 开始的代码为:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL || length <= 0)
return ;
int originallength = 0;
int blanklength = 0;
while(*str != '\0'){
++originallength;
if(*str == ' ')
++blanklength;
++str;
}
int newlength = originallength + blanklength*2;
if(newlength > length)
return ;
int p1 = originallength;
int p2 = newlength;
while(p1 >= 0 && p1 < p2){
if(str[p1] == ' '){
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}
else{
str[p2--] = str[p1];
}
-- p1;
}
}
};
该为错误的代码
以上两次代码的区别就仅仅是while遍历str,一个是指针方式,一个值数组方式,其他都一点没变。
======================================最后补充==================================
问题已经解决! 谢谢各位牛油+牛大大们! (PS:问了一个这么基础的问题,望见谅!)