有没有会啊?救命啊亲亲们!
1、实现重载的插入符函数,函数内,用下标运算符[ ]读取,并一个个输出单个字符,
字符之间输出一个空格,输出不换行。
2、执行 string s=””; 并用插入符输出其长度和内容。
3、执行 s= ” Care and diligence bring luck.”,用下标运算符[ ]修改第一个字符为大写
字母 K。分两行分别输出修改前后的字符串
4、设计并编写全局函数,生成一个指定长度的随机字符串(字符 ASCII 取值范围为
0x21 ~ 0x7E),并返回字符串的首地址。提醒:不得返回局部变量的指针。
5、随后利用上述该函数,生成内容随机的 string 对象 t,长度为 40 字节。调用
reverse()函数,生成倒序结果。分两行输出原始字符串和倒序后得到的字符串。单
独一行输出倒叙前后的字符串长度。
6、执行 s += t,输出 s 并换行。
7、编写 upper 函数,用 t 测试。
8、编写其它运算符函数:+,<,==。注意 operator==的要求是不区分大小写。Main
函数已经编写了测试代码。观察结果是否通过,若不通过,则调试并解决问题。
9、对比 C 语言的字符串操作,体会 mystring 类,在运算符重载后的字符串操作的便
利性。
//所有补充部分必须避免使用之前或之后用过的变量名,main函数中,不得在补充区域外修改代码
int main(int argc, _TCHAR* argv[])
{
mystring s="";
//补充完整,实现功能2,空串
//功能2补充结束
s = "Care and diligence bring luck.";
//补充完整,实现功能3,[]运算符
//功能3补充结束
/****注意:功能4补充是全局函数,不在main内****/
//补充完整,实现功能5(reverse)
//功能5补充结束
//补充完整,实现功能6 (s+=t)
//功能6补充结束
//main中以下代码不能修改!!!!
//功能7
cout<<"将t转换为大写:\t"<//
//功能8
int i;
char testrelationstr[5][16] = { "Ab23", "ab23", "23", "", "a3494"};
bool resulteq[5] = { 1, 1, 0, 0, 0};
bool resultls[5] = { 0, 1, 0, 0, 1};
s = testrelationstr[0];
int count = 0;
for(i = 0; i < 5; i++)
count += (s == mystring(testrelationstr[i])) == resulteq[i];
//通过统计结果相符的数量,判断==运算符是否正确
cout<<"运算符==测试: "<< (count==5 ? "":"不")<<"通过"<0;
for(i = 0; i < 5; i++)
count += (s < mystring(testrelationstr[i])) == resultls[i];
//通过统计结果相符的数量,判断<运算符是否正确
cout<<"运算符<测试: "<< (count==5 ? "":"不")<<"通过"<60], bufadd2[30];
mystring tadd1 = genstr(bufadd1, 16), tadd2 = genstr(bufadd2, 30);
assert(strlen(bufadd1) == 15);
assert(strlen(bufadd2) == 29);
//测试特殊的 += :两个操作数是同一个对象
char testbuf[60];
strcpy(testbuf, bufadd1);
strcat(testbuf, bufadd1);
mystring addresult1 = testbuf;
cout<<"运算符+=测试: "<<( (addresult1 == (tadd1 += tadd1))? "":"不" )<<"通过"<31);
assert(strlen(bufadd1) == 30);
mystring tadd4 = tadd1 + tadd2;
strcat(bufadd1, bufadd2);
mystring addresult2 = bufadd1;
cout<<"运算符+测试1: "<<( (addresult2 == tadd1 + tadd2)? "":"不" )<<"通过"<40);
mystring addresult3 = tadd1 + tadd2;
//60是头文件mystring中指定的长度
cout<<"运算符+测试2: 长度"<<(addresult3.len() >= 60 ? "错误":"正确")<0;
}
可以使用如下代码实现功能2:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, _TCHAR* argv[]) {
mystring s("");
cout << "Length: " << s.my_size() << endl;
cout << "Content: " << s << endl;
return 0;
}
在上述代码中,我们使用了mystring
类型的默认构造函数创建了一个空的字符串s
,并使用my_size()
函数和重载的插入符分别输出了字符串s
的长度和内容。
需要注意的是,由于题目要求补充部分不能使用之前或之后用过的变量名,因此在代码中我们使用了mystring
类型代替string
类型,避免与之前的代码重复。同时,我们也根据题目要求使用了my_size()
函数
参考:https://blog.csdn.net/ccc369639963/article/details/122874271
不知道你这个问题是否已经解决, 如果还没有解决的话:A解题思路
1,输入2个字符串
2.逐个遍历这两个字符串相对应的每个元素,如果相等继续判断下一个
3.遇到不相等的元素直接返回差值即可。
B代码部分
#include<stdio.h>
void mystrcmp(char s1[], char s2[])
{
int i=0;
while (s1[i]||s2[i])
{
if (s1[i] - s2[i] == 0)
i++;
else
{
printf("%d", s1[i] - s2[i]);
break;
}
}
}
void main()
{
char s1[10], s2[10];
gets(s1);
gets(s2);
mystrcmp(s1, s2);
}
C执行结果