构造函数是BigInt(string s);
//所以你要写BigInt a("10086");
//或者
string s("10086"); //也可以string s="10086";
BigInt a(s); //也可以BigInt a=s;
#include <iostream>
using namespace std;
class MyString
{
public:
void Zero();
MyString();
~MyString();
void zeroStr(){if(m_string) {delete m_string;m_string=0;}}
MyString(const char str);
MyString(MyString & str);
MyString & operator=(const MyString & str);//这里用的是引用返回,所用一定要用this指针
MyString & operator=(const char c_str);//这里用的是引用返回,所用一定要用this指针
char operator[](const unsigned int index);
MyString strcat(const MyString & str);
MyString strcat(const char c_str);
bool operator>(const MyString &str);
/其余部分因时间关系,我就不写了,不过可以参考以上的方法和视图/
char getString();
int length();
private:
char m_string; //指向字符串首地址
unsigned int m_size; //字符串长度
};
void MyString::Zero()
{
if(!m_string)
return;
delete m_string;
m_string=0;//清零很重要
}
MyString::MyString()
{
m_size=255;
m_string=new char[255];
m_string='\0';
cout<<"我是\t无参数构造函数"<<endl;
cout<<"m_string的值是:\t"<<m_string<<endl;
}
MyString::~MyString()
{
Zero();
cout<<"析构函数运行了"<<endl;
}
MyString::MyString(const char str)
{
m_size=strlen(str)+1;
m_string=new char[m_size];
memcpy(m_string,str,m_size);
cout<<"我是\t字符串构造函数"<<endl;
cout<<"m_string的值是:\t"<<m_string<<endl;
}
MyString::MyString(MyString & str)
{
m_size=strm_size;
m_string=new char[m_size];
memcpy(m_string,strm_string,m_size);
cout<<"我是\t浅层拷贝"<<endl;
cout<<"m_string的值是:\t"<<m_string<<endl;
}
MyString & MyString::operator=(const MyString & str)
{
m_size=strm_size;
m_string=new char[m_size];
memcpy(m_string,strm_string,m_size);
cout<<"我是\t对象赋值运算"<<endl;
cout<<"m_string的值是:\t"<<m_string<<endl;
return this;
}
MyString & MyString::operator=(const char c_str)
{
m_size=strlen(c_str)+1;
m_string=new char[m_size];
memcpy(m_string,c_str,m_size);
cout<<"我是\t字符串赋值运算"<<endl;
cout<<"m_string的值是:\t"<<m_string<<endl;
return this;
}
char MyString::operator[](const unsigned int index)
{
cout<<"我是\t取值运算"<<endl;
if(index<m_size) return m_string[index];
return '\0';
}
bool MyString::operator>(const MyString &str)
{
cout<<"我是\t比较运算>"<<endl;
if(m_string>(strm_string))
return 1;
return 0;
}
char MyString::getString()
{
return m_string;
}
int MyString::length()
{
return m_size;
}
MyString MyString::strcat(const MyString & str)
{
char temp[255]={0};
::strcpy(temp,m_string);
::strcat(temp,strm_string);
MyString m_str(temp);
return m_str;//这用的是匿名对象做为返回值,还有其它方法你根据自己需要自己改
}
int main(int argc, char argv[])
{
/这里是测试部分/
MyString str("I like C++");
MyString strtest;
strtest="You love girls";
strtest>str cout<<"真的很大"<<endl:cout<<"真的很小"<<endl;
MyString three=strteststrcat(str);//一个方法会引用多种方式\构造\挎贝\重写,自行研究
cout<<"three 是这样的:"<<threegetString()<<endl;
cout<<"打印第一个字符:\t"<<strtest[2]<<endl;
/这里是测试部分/
return 0;
}
//希望能对你有所帮助。
String 函数
返回 Variant (String),其中包含指定长度重复字符的字符串。
语法
String(number, character)
String 函数的语法有下面的命名参数:
部分说明
number 必要参数;Long。返回的字符串长度。如果 number 包含 Null,将返回 Null。
character 必要参数;Variant。为指定字符的字符码或字符串表达式,其第一个字符将用于建立返回的字符串。如果 character 包含 Null,就会返回 Null
String 函数示例
本示例使用 String 函数来生成一指定长度,且只含单一字符的字符串。
Dim MyString
MyString = String(5, "")' 返回 ""。
MyString = String(5, 42)' 返回 ""。
MyString = String(10, "ABC")' 返回 "AAAAAAAAAA"。
string先分到内存空间,string2后分到,因为是局部变量,被分到栈区中,因此string2在string的前面,申请了5个字节,但是由于栈对齐的原因,在这里例子里面,二者距离就是8个字节,也就是string2里可以放8个字节,而它的第9个字节就是string[0]了。这样你从string复制到string2,可以认为就是把每个字符都前移了8个字节,包括字符串的结束符‘/0’。最后的结果你会发现从string2开始识别的字符串就是原串,而从string开始,就是“五”了,(前面每个汉字都占两个字节)
复制之前
复制之后
bcopy,memccpy,memcpy,strcpy,strncpy
表头文件 #include <stringh>
定义函数 char strcat (char dest,const char src);
函数说明 strcat()会将参数src字符串拷贝到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。
返回值 返回参数dest的字符串起始地址
范例 #include <stringh>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcat() : %s\n",a);
printf("after strcat() : %s\n",strcat(a,b));
}
执行 before strcat () : string(1)
after strcat () : string(1)string(2)
//---------------------------------------------//
strcpy(拷贝字符串)
相关函数 bcopy,memcpy,memccpy,memmove
表头文件 #include<stringh>
定义函数 char strcpy(char dest,const char src);
函数说明 strcpy()会将参数src字符串拷贝至参数dest所指的地址。
返回值 返回参数dest的字符串起始地址。
附加说明 如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
范例 #include<stringh>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcpy() :%s\n",a);
printf("after strcpy() :%s\n",strcpy(a,b));
}
执行 before strcpy() :string(1)
after strcpy() :string(2)
//-----------------------------------//
strlen(返回字符串长度)
相关函数
表头文件 #include<stringh>
定义函数 size_t strlen (const char s);
函数说明 strlen()用来计算指定的字符串s的长度,不包括结束字符"\0"。
返回值 返回字符串s的字符数。
范例 /取得字符串str的长度/
#include<stringh>
main()
{
char str = "12345678";
printf("str length = %d\n", strlen(str));
}
执行 str length = 8
//----------------------------------------//
strcmp(比较字符串)
相关函数 bcmp,memcmp,strcasecmp,strncasecmp,strcoll
表头文件 #include<stringh>
定义函数 int strcmp(const char s1,const char s2);
函数说明 strcmp()用来比较参数s1和s2字符串。字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1第一个字符值减去s2第一个字符值,若差值为0则再继续比较下个字符,若差值不为0则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
返回值 若参数s1和s2字符串相同则返回0。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0 的值。
范例 #include<stringh>
main()
{
char a="aBcDeF";
char b="AbCdEf";
char c="aacdef";
char d="aBcDeF";
printf("strcmp(a,b) : %d\n",strcmp(a,b));
printf("strcmp(a,c) : %d\n",strcmp(a,c));
printf("strcmp(a,d) : %d\n",strcmp(a,d));
}
执行 strcmp(a,b) : 32
strcmp(a,c) :-31
strcmp(a,d) : 0
1.声明一个C++字符串
声明一个字符串变量很简单:
string Str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:
a) string s; //生成一个空字符串s
b) string s(str) //拷贝构造函数 生成str的复制品
c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
e) string s(cstr) //将C字符串作为s的初值
f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。
g) string s(num,c) //生成一个字符串,包含num个c字符
h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值
i) s~string() //销毁所有字符,释放内存
都很简单,我就不解释了。
2.字符串 *** 作函数
这里是C++字符串的重点,我先把各种 *** 作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。
a) =,assign() //赋以新值
b) swap() //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字符
d) insert() //插入字符
e) erase() //删除字符
f) clear() //删除全部字符
g) replace() //替换字符
h) + //串联字符串
i) ==,!=,<,<=,>,>=,compare() //比较字符串
j) size(),length() //返回字符数量
k) max_size() //返回字符的可能最大个数
l) empty() //判断字符串是否为空
m) capacity() //返回重新分配之前的字符容量
n) reserve() //保留一定量内存以容纳一定数量的字符
o) [ ], at() //存取单一字符
p) >>,getline() //从stream读取某值
q) << //将谋值写入stream
r) copy() //将某值赋值为一个C_string
s) c_str() //将内容以C_string返回
t) data() //将内容以字符数组形式返回
u) substr() //返回某个子字符串
v)查找函数
w)begin() end() //提供类似STL的迭代器支持
x) rbegin() rend() //逆向迭代器
y) get_allocator() //返回配置器
private string sss(string ss)
{
string s = "";
for (int i = 0; i < ssLength / 2; i++)
{
s += ss[i]ToString() + ss[ssLength / 2 + i]ToString();
}
return s;
}
以上就是关于c++string函数全部的内容,包括:c++string函数、用C++语言实现String类、vba 函数 麻烦举个例子介绍一下string()这个函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)