//针对你问的的问题二,不是中文符号问题,而是"\0" 这是一个字符串,但是m_iStr[n]是一个字符,所以肯定报错了。
#include
using namespace std;
#define N 100
class CString
{
char m_iStr[N];
int m_iStrLength;
public:
CString(){m_iStrLength=0;}; //初始化
void StrInput()
{
cout<<"请输入一个字符串:"<
//scanf("%[^\n]",m_iStr);
}
void StrLength()
{
int n=0;
while(m_iStr[n]!='\0') //问题二
{
m_iStrLength++;
n++; //问题四
}
cout<
void StrCout()
{
cout<
};
int main()
{
CString str1; //问题三
str1.StrInput();
str1.StrLength();
str1.StrCout();
return 0;
}
改好了,看一下注释
#include
using namespace std;
#define N 10
class CString
{
char m_iStr[N];
int m_iStrLength;
public:
CString(){}; //少了括号
void StrInput()
{
cout<<"请输入一个字符串:"<
}
void StrLength()
{
int n=0;
m_iStrLength=0; //这里要先给个初值0
while(m_iStr[n]!='\0') //字符比较,单字符用单引号
{
m_iStrLength++;
n++; //这里少了n变量的变化,导致死循环了
}
cout<
void StrCout()
{
cout<
};
int main()
{
CString str1; //去掉括号
str1.StrInput();
str1.StrLength();
str1.StrCout();
return 0;
}
修改如下:
#include
using namespace std;
#define N 100
class CString{
char m_iStr[N];
int m_iStrLength;
public:
CString(){m_iStrLength=0;m_iStr[0]='\0';}
// 无参构造函数就初始化长度为0,字符数组只有'\0'
void StrInput()
{
cout<<"请输入一个字符串:"<
}
void StrLength()
{
int n=0;
m_iStrLength = 0; // 初始化,否则每调用一次,m_iStrLength都要增加,导致逻辑错误
while(m_iStr[n++]!='\0') // while中n要递增
{
m_iStrLength++;
}
cout<
void StrCout()
{
cout<
};
int main()
{
CString str1; // 使用无参构造函数构造一个空串
str1.StrInput();
str1.StrLength();
str1.StrCout();
return 0;
}
无