程设第四周作业总结+字符串用法总结

2020.3.4
1.流插入,流提取运算符的重载只能作为全局函数进行,如果必须在类内写,可以考虑重载类型转换运算符(见笔记)。
2.在类内也可以写非成员函数(写成友元函数就不是成员函数了,这样可以在类内重载<<和>>)
3.如果是一个二维数组类,想要写出类似 a[i][j] 这种效果,可以考虑只重载第一个【】,其返回值类型为int*,这样第二个【】就不用重载了 见2020程序设计实习之运算符重载D题

    int* operator[](int jj){//自定义数组的双括号可以这么搞
        return parray+jj*c;
    }

4.使用memcpy的第三个参数是字节数,如果是int型的一定要乘sizeof(int)!!!

memcpy(parray,ta.parray,(ta.r*ta.c)*sizeof(int));//memcpy要用字节数!

5.关于string,char[]字符串的几种操作的总结
(1)字符串初始化:
①char【】的初始化

    char s[100]="buiabfi";//最后一位会自动补上‘\0’,初始数组要开大一点
    //s="fas";  //直接写等号只能在初始化的时候用,在赋值的时候用会报错

②string的初始化

    string s="afddfa";//初始化的时候直接写
    string s2;//啥都不写就是空值
    s="dnaosfno";//可以改成这样

(2)字符串长度:
①char[]:

    char s[6]="12345"; //后面会自动保存\0,要记得多留出一位
    cout<<strlen(s)<<endl;//5  strlen只能用在char[]数组,且计算到\0前一位
    cout<<sizeof(s)<<endl;//6  sizeof计算的是整个数组的容量,与字符串长度无关!!

②string:

    string s="123456";
    cout<<s.length()<<endl;//6 string的长度计算只能用.length()

(3)整数和字符串的互换:
①整数转字符串:
→ 直接用atof即可,但是字符串必须是char[]类型的

    char s[100]="154";
    string s1="158";
    int n=atof(s);  //此处只接受char[]类型字符串
    cout<<n<<endl;
    cout<<atof(s1.c_str())<<endl;//string需要经过转化成char[]之后才能用

②字符串转整数:
→ 必须使用sprintf

    char s[100];
    sprintf(s,"%d",19991025);  //此处必须是char[]
    //string哪怕转换后也不行
    cout<<s<<endl;//19991025

(4)字符串拼接
①cahr[]之间的拼接

    char a1[100]="12345",a2[10]="abcde";
    strcat(a1,a2);//a1必须开的足够大,因为这个函数是直接贴在a1里的
    cout<<a1<<endl;

②string之间的拼接

    string s1="12345",s2="abcde";
    s1=s1+s2;
    //s1+=s2;   也可以
    cout<<s1<<endl;

(5)增添一个字符:
①char[]可以直接加
②string

    string s1="12345";
    s1+='a';
    s1+="b";
    cout<<s1<<endl;//12345ab

(6)字符串的复制:
①char[]

    char a[5]="1234",b[7]="abcdef";
    strcpy(a,b);//memcpy也行,但是记得最后一位写上字符数
    cout<<a<<endl;//a可以比b小,但是非常不规范,建议a开的大一些。不规范原因见下
    cout<<strlen(a)<<endl;//6
    cout<<sizeof(a)<<endl;//5   这样很可能忘记a的长度,之后进行操作的时候出错

②string

    string s1="12345",s2="abc";
    s1=s2;
    cout<<s1<<endl; //abc

(7)string和char[]的转换
①string->char[]:

	string s;
	s.c_str();//这个东西是char[]类型的

②char[]->string:

    char s[100]="123456XY";
    string s1;
    s1=s;//可以直接赋值
    string s2(s);//也可以写在初始化的时候
    cout<<s1<<endl;
    cout<<s2<<endl;

(8)判断string里每一位是什么:

    string s="0123456";
    int i;
    for(i=0;i<s.length();++i){
        if(s[i]=='6')//string里的每一位是字符型的
            break;
    }
    cout<<i<<endl;//6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值