为什么这种遍历字符串的方法是错误的?【问题已解决!谢谢各位】
假设有个字符串:
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:问了一个这么基础的问题,望见谅!)