首页 > 代码库 > 字符串的遍历

字符串的遍历

#include<iostream>using namespace std;void getChar1(char *str);void getChar2(char *str);int main(void){    //字符指针用串常量初始化。分两步进行,首先申请堆空间,然后填入串值    char *str="I Love ShangHai";
   //cin>>str; getChar1(str); getChar2(str); getchar();}
void getChar1(char *str){ while(*str!=\0) { cout<<*str; str++; } cout<<endl;}void getChar2(char *str){ int len=strlen(str); for(int i=0;i<len;i++) { cout<<str[i]; } cout<<endl;}

“I Love ShangHai” C++会自动在串常量加上‘\0’表示结束。‘\0’的ASCII码值为0,代表一个空操作。while(*str) 和while(*str!=‘\0‘)是一个意思。

字符指针必须必须先申请堆空间,然后才能填入值。看看下面程序会出现什么问题。

#include<iostream>using namespace std;void getChar1(char *str);int main(void){    char *str;    cin>>str;    getChar1(str);    getchar();}void getChar1(char *str){    while(*str!=\0)    {        cout<<*str;        str++;    }    cout<<endl;}

f7成功编译。但是编译成功后运行时,直接奔溃。因为str 仅仅是一个字符指针,没有地方存输入的值。

#include<iostream>using namespace std;void getChar1(char *str);int main(void){    //字符指针用串常量初始化。分两步进行,首先申请堆空间,然后填入串值    char *str="I Love ShangHai";    cin>>str;    getChar1(str);    getchar();}void getChar1(char *str){    while(*str!=\0)    {        cout<<*str;        str++;    }    cout<<endl;}

f7成功编译。编译成功后运行f5,程序直接奔溃。正确做法应该这样......

#include<iostream>using namespace std;int main(void){    char *str=new char[80];     cout<<"输入一个字符串: ";    for(int i=0;i<strlen(str);i++)    {        cout<<str[i];    }    cout<<endl;    delete []str;    str=NULL;}