用c++实现串的功能,但老是出现error C2228: left of '.StringLength' must have class/struct/u错误!

CEL1 2017-11-02 10:31:37
代码如下:
#include<iostream>
#include<string>
#define Maxsize 50
using namespace std;

/************************************/

class String//String类
{
public:
String();//构造函数 (进行初始化)
~String();//析构函数 (回收处理)
void CreateString();//创建串
void ShowString();//显示串
void Modify(int place_1,int place_2,char str2[20]);//修改串
void Insert(int place_3,char str3[20]);//插入串
void Delete(int place_4,int place_5);//删除子串
void FindString(char str4[20]);//查找串
int StringLength();// 串长
private:
char *Str;
int Length;
};

/************************************/

String::String()
{
Str=new char[Maxsize];
}

/************************************/

String::~String()//析构函数 (回收处理)
{
delete []Str;
cout<<"该串已经被删除"<<endl;
}

/************************************/

void String::CreateString()//创建串
{
int i=0;
char ch;
while(ch=getchar()!=EOF)
{
if(ch!=13)
cin.get(Str[i]);
i++;
}
Length=i;
}

/************************************/

void String::ShowString()
{
int i;
if(Length<=0)
cout<<"串为空!"<<endl;
cout<<"当前顺序串为:";
for(i=0;i<Length;i++)
cout<<Str[i];
cout<<endl;
}

/************************************/

void String::Modify(int place_1,int place_2,char str2[20])
{
int i;
i=place_2-place_1;
Str.replace(place_1,i,str2[20]);
}

/************************************/

void String::Insert(int place_3,char str3[20])
{
Str.insert(place_3,str3[20]);
}

/************************************/

void String::Delete(int place_4,int place_5)
{
int i;
i=place_5-place_4;
Str.erase(place_4,i);

}

/************************************/

void String::FindString(char str4[20])
{
int i,f;
f=Str.find(str4[20]);
if(f<Length)
cout<<"已找到!位置为:"<<f<<endl;
else
cout<<"未找到!"<<endl;
}

/************************************/

int String::StringLength()
{
return Length;
}

/************************************/

void Menu()
{
system("cls");
cout<<"顺序串基本功能菜单"<<endl;
cout<<"=========="<<endl;
cout<<"1.建立顺序串(仅限单行的字符串,建议不用汉字。)"<<endl;
cout<<"2.显示串"<<endl;
cout<<"3.修改串"<<endl;
cout<<"4.插入串"<<endl;
cout<<"5.删除串"<<endl;
cout<<"6.查找串"<<endl;
cout<<"7.求串长度"<<endl;
cout<<"8.结束程序"<<endl;
cout<<"=========="<<endl;
}

/************************************/
//place_1、place_2用于修改
//place_3用于插入
//place_4用于删除
//str2(修改)、str3(插入)、str4(查找)
int main()
{
int place_1,place_2,place_3,place_4,place_5;
char str2[20],str3[20],str4[20];
int cho;
String string(char str[20],int length);
while(1)
{
Menu();
do
{ cout<<"请输入选择:";
cin>>cho;
}while(cho<1||cho>8);
switch(cho)
{
case 1:
cout<<"请输入需要创建的字符串并以Ctrl+Z结束!"<<endl;
string.CreateString();
cout<<"该字符创建成功!"<<endl;
break;

case 2:
string.ShowString();
break;

case 3:
cout<<"请输入需要修改串的初位置:";
cin>>place_1;
cout<<endl;
cout<<"请输入需要修改串的末位置:";
cin>>place_2;
cout<<"请输入想要修改成的串:";
cin>>str2;
string.Modify(place_1,place_2,str2[20]);
cout<<"插入成功!"<<endl;
break;

case 4:
cout<<"请输入插入的位置:";
cin>>place_3;
cout<<endl;
cout<<"请输入插入的子串:";
cin>>str3[20];
string.Insert(place_3,str3[20]);
break;

case 5:
cout<<"请输入删除的初位置:";
cin>>place_4;
cout<<endl;
cout<<"请输入删除的末位置:";
cin>>place_5;
string.Delete(place_4,place_5);
cout<<"删除成功!"<<endl;
break;

case 6:
string.FindString(str4[20]);
break;

case 7:
cout<<"当前串的长度为:"<<string.StringLength()<<endl;
break;

case 8:
return 0;

}
system("pause");
cin.get(); //从指定的输入流中提取一个字符,防止屏幕一闪而过
}
}




...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-11-04
  • 打赏
  • 举报
回复
把报的错误。贴上来。。看看
CEL1 2017-11-03
  • 打赏
  • 举报
回复
还是那个样子!
ooolinux 2017-11-03
  • 打赏
  • 举报
回复
代码中所有的string都改成aString 试试,注意大小写匹配,不要把String也改了。
CEL1 2017-11-03
  • 打赏
  • 举报
回复
我换个对象名也是一样的报错,可能真正的问题还不是这个吧!
ooolinux 2017-11-03
  • 打赏
  • 举报
回复
String aString(char str[20],int length); string是标准库的类,名字冲突了。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧