字符串的遍历

#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;
}

 

 

 

posted @ 2014-06-20 16:15  北门吹风  阅读(723)  评论(0编辑  收藏  举报