```cpp
```cpp
《数据结构》实验报告
程序名: 字符串
一、上机实验的问题和要求:
小写转大写,大写转小写,字符串截取
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
}
掌握string里面的成员函数,有的可以直接调用,不用自己写
string str:生成空字符串
string s(str):生成字符串为str的复制品
string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值
string s(num ,c):生成num个c字符的字符串
string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
eg:
string str1;
string str2("123456789");
string str3("12345", 0, 3);
string str4("012345", 5);
string str5(5, '1');
string str6(str2, 2);
#include <iostream>
#include <string>
using namespace std;
void test1()
{
string str1;
string str2("123456789");
string str3("12345", 0, 3);
string str4("0123456", 5);
string str5(5, '1');
string str6(str2, 2);
cout<<"str2:"<<str2<<endl;
cout<<"str3:"<<str3<<endl;
cout<<"str4:"<<str4<<endl;
cout<<"str5:"<<str5<<endl;
cout<<"str6:"<<str6<<endl;
}
int main()
{
test1();
return 0;
}
1. size()和length():返回string对象的字符个数,他们执行效果相同。
2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常
3. capacity():重新分配内存之前,string对象能包含的最大字符数
1. C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。
在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,
比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)
同时,string (“aaaa”) <string(aaaaa)。
2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。
他返回一个整数来表示比较结果,返回值意义如下:0:相等 1:大于 -1:小于 (A的ASCII码是65,a的ASCII码是97)
void test4()
{
string s1;
s1.push_back('a');
s1.push_back('b');
s1.push_back('c');
cout<<"s1:"<<s1<<endl;
s1.insert(s1.begin(),'1');
cout<<"s1:"<<s1<<endl;
}
void test5()
{
string s1("abc");
s1.append("def");
cout<<"s1:"<<s1<<endl;
string s2 = "abc";
string s3 = "def";
s2 += s3.c_str();
cout<<"s2:"<<s2<<endl;
}
void test6()
{
string s1("abcdef");
for( int i = 0; i < s1.size() ; i++ )
{
cout<<s1[i];
}
cout<<endl;
string::iterator iter = s1.begin();
for( ; iter < s1.end() ; iter++)
{
cout<<*iter;
}
cout<<endl;
string::reverse_iterator riter = s1.rbegin();
for( ; riter < s1.rend() ; riter++)
{
cout<<*riter;
}
cout<<endl;
}
1. iterator erase(iterator p);
2. iterator erase(iterator first, iterator last);
区间[first,last)上所有字符
3. string& erase(size_t pos = 0, size_t len = npos);
位置pos开始的len个字符
4. void clear();
1. string& replace(size_t pos, size_t n, const char *s);
从pos索引开始的n个字符,替换成字符串s
2. string& replace(size_t pos, size_t n, size_t n1, char c);
3. string& replace(iterator i1, iterator i2, const char* s);
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "ABCDEFG";
for( int i = 0; i < s.size(); i++ )
{
s[i] = tolower(s[i]);
}
cout<<s<<endl;
return 0;
}
1. size_t find (constchar* s, size_t pos = 0) const;
-1表示查找不到子串
2. size_t find (charc, size_t pos = 0) const;
-1表示查找不到字符
3. size_t rfind (constchar* s, size_t pos = npos) const;
-1表示查找不到子串
4. size_t rfind (charc, size_t pos = npos) const;
5. size_tfind_first_of (const char* s, size_t pos = 0) const;
6. size_tfind_first_not_of (const char* s, size_t pos = 0) const;
7. size_t find_last_of(const char* s, size_t pos = npos) const;
8. size_tfind_last_not_of (const char* s, size_t pos = npos) const;
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void test9()
{
string s = "cdefba";
sort(s.begin(),s.end());
cout<<"s:"<<s<<endl;
}
三、源程序及注释(说明每个文件的文件名即可,电子档的*.h和*.cpp文件压缩传到FTP上):
#include<iostream>
#include<algorithm>
#include<string>
#include<cctype>
using namespace std;
int main()
{
cout << "请输入一个的字符串:";
string str;
cin >> str;
transform(str.begin(), str.end(), str.begin(), tolower);
cout << "大写转化为小写后为:" << str << endl;
transform(str.begin(), str.end(), str.begin(), toupper);
cout << "小写转化为大写后为:" << str << endl;
int i;
cout << "输入想对字符串第几个字符进行操作" << endl;
cin >>i;
string str1, str2, str3, str4;
str1 = str.substr(0, i);
cout << "字符串前" << i << "个字符为" << str1<<endl;
str2 = str.substr(i);
cout << "去掉字符串前" << i << "个字符后字符串为" << str2<<endl;
str3 = str.substr(str.length() - i);
str = str.substr(str.length() - i, str.length());
cout << "从右边取第" << i << "个字符后字符串为" << str2 << endl;
str4 = str.substr(0, str.length() - i);
cout << "从右边去掉第" << i << "个字符后字符串为" << str2 << endl;
return 0;
}
四、运行输出结果:
(可以将运行结果抓图贴至此处)
五、调试和运行程序过程中产生的问题及采取的措施:
六、对算法的程序的讨论、分析,改进设想,其它经验教训:
七、对数据结构教学的意见和建议: