字符串

 

 字符数组:TCHAR

 求字符串长度:

● Ansi:strlen(char *str);
● Unicode:wcslen(wchar_t *str);
● 通用函数:_tcslen(TCHAR *str);

需要  #include <tchar.h>

例子:

TCHAR ch[] = _T("我是李明");
int x= _tcslen(ch);//   x=4

注意:是有效字符数,不包括\0

 

字符串占用字节数:

TCHAR ch[] = _T("1234567890");
int x = sizeof(ch);    //返回占用字节数【包括\0】 22
//Unicode编码一个字符占两个字节

 

 

字符串转换成数值:

● Ansi:int atoi(const char *str);
● Unicode:int _wtoi(const wchar_t *str);
● 通用函数:_tstoi(const TCHAR *str);

例子:

TCHAR ch[] = _T("120");
int x= _tstoi(ch);

Strcat   字符串连接函数

作用:将两个char字符数组链接,把参数2连接到参数1上

ANI:  strcat_s(a,b )

Unicode:    wcscat_s(str1, str2); 把str2加到str1的尾部

通用函数:_tcscat_s(str1,str2) 

例子:

TCHAR ch[12] = _T("我就是李明");
TCHAR ch1[] = _T("liming");
_tcscat_s(ch,12,ch1);
SetDlgItemText(label1,ch);

参数2可以省略,ch的字符数至少=ch的字符数+ch1的字符数+1,也就是说必须有\0的字符空间

 

 strcpy_s(a,b )   字符串复制

Ansi:strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource);

Unicode:wcscpy_s(wchar_t *strDestination, size_t numberOfElements, const wchar_t *strSource);

 通用函数:_tcscpy_s(TCHAR *strDestination, size_t numberOfElements, const TCHAR *strSource);

参数1   目的缓冲区

参数2   就是 参数1 的空间大小,以字节为单位

参数3  待复制的缓冲区

说明:参数2可以省略,参数1的字符数至少=参数3的字符数+1,也就是说必须有\0的字符空间

不仅复制字符串内容,还复制字符串的结束符

 例子

TCHAR ch[12] = _T("我就是李明");
TCHAR ch1[] = _T("liming");
_tcscpy_s(ch,ch1);

 

TCHAR ch3[12] = _T("我就是李明");
TCHAR *p = _T("liming");
_tcscpy_s(ch3, p);  //也可以是指针

 

strcmp(a,b )     字符串比较-区分大小写

格式:int strcmp(const char *s1, const char *s2);

a=b   返回值0

a>b   返回值>0

a<b   返回值<0

Unicode:      int x = wcscmp(ch, ch1);

注:以上所介绍的比较字符串是否相等的函数对于英文来说是要区分大小写的,即使字母都相同但是大小写不同,函数也会认为这两个字符串是不同的

 

stricmp(a,b)     字符串比较-不区分大小写

 

a=b   返回值0

 

a>b   返回值>0

 

a<b   返回值<0

 

Unicode:  _wcsicmp(ch, ch1)

 

 

 

 

Cstring

Cstring常用操作:视频教程

需要    #include <cstring>

<cstring>是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即'\0'结尾字符串)相关的一些类型和函数的声明

CString是通过“引用”来管理字符串的实际上CString对象只是一个指针成员变量,这个指针指向一个相关的引用内存块,所以任何CString实例的长度只有4字节,即: int len = sizeof(CString);//len等于4

注意:CString是MFC类,如果要在控制台使用该类时,需要对程序进行属性设置以及添加相应的头文件

菜单栏“项目->XXX属性”--->在项目属性页的左侧选择“配置属性->常规”,在右侧的“项目默认值->MFC的使用”的下拉菜单中,选择“在静态库中使用MFC”

 

添加头文件    #include <afxwin.h>  

需要注意的是,如果项目中还用到了Windows.h头文件,那么在包含头文件时,afxwin.h必须在Windows.h之前

【Cstring这个类不建议在控制台用,总是出错】

 

 

 以下代码在MFC中

void CCMDlg::OnBnClickedButton2()
{
    //按钮2
    CString str;  //定义一个变量
    str = _T("我是李四");
    CString str1(_T("aAbBgG"));   //定义并赋值

    TCHAR ch[10] = _T("我是王五");
    CString str2 = ch;  //用TCHAR字符数组来初始化

    TCHAR *p = _T("我是刘强");
    CString str3 = p;   //用TCHAR数组指针来初始化
    int x = str3.GetLength();  //返回字符串的有效字符数
    x=_tcslen(str3);           //返回字符串的有效字符数
    
    str3.Empty();//清空字符串
    bool bl = str3.IsEmpty();  //判断字符串是否为空
    //个人:不能判断TCHAR字符串
    str = bl == true ? _T("True") : _T("False");

    str1.MakeUpper();  //所有字符转换成大写
    str1.MakeLower();  //所有字符转换成小写
    str2.MakeReverse();  //反转字符串顺序

    str = str1 + str2;  //字符串的连接
    str = str1 + ch;    //与TCHAR字符串进行连接

    str = _T("aBc");
    str1 = _T("abc");
    if (str == str1){                //判断字符串是否相等,区分大小写
        SetDlgItemText(label2, _T("相等"));
    }
    else
    {
        SetDlgItemText(label2, _T("不相等"));
    }

    if (str > str1) {                //判断str是否大于str1;!= 不等于;>=;<=
        SetDlgItemText(label2, _T("大于"));
    }
    
    if (str.Compare(str1)) {      //内容完全一致则返回0;如果小于,则返回为-1;如果大于,则返回1,区分大小写
        SetDlgItemText(label2, _T("不相等"));
    }
    else {
        SetDlgItemText(label2, _T("相等"));
    }
    str = _T("aBc");
    str1 = _T("abc");
    if (str.CompareNoCase(str1)) {      //内容完全一致则返回0;如果小于,则返回为-1;如果大于,则返回1,不区分大小写
        SetDlgItemText(label2, _T("不相等"));
    }
    else {
        SetDlgItemText(label2, _T("相等"));
    }

    //字符串的查找
    str=_T("abcdefgcde");
    x = str.Find(_T("cde"), 0); //x的值为2;从指定位置开始查找指定字符串,返回其位置(找不到返回-1)
    //只找一个
    x = str.ReverseFind('e'); //x的值为9;从字符串末尾开始查找指定的字符,返回其位置,找不到返回 -1,虽然是从后向前查找,但是位置为从开始算起
    x = str.FindOneOf(_T("cbd")); //x 的值为1;查找参数中给定字符串中的任意字符,返回第一次出现的位置
    //提取
    str1 = _T("中华人民共和国中国人");
    str = str1.Left(2);    //从左边提取n个字符
    str = str1.Mid(0, 3);  //提取指定范围的字符
    //参数1 起始位置
    //参数2 提取字符的个数

    str=str1.Right(2);    //从右边提取n个字符
    
    //字符串的替换和删除
    x=str1.Replace(_T(''), _T(''));//把字符串中的字符'中'都替换成'我'
    //返回替换的次数
    str1 = _T("中华人民共和国中国人");
    x= str1.Replace(_T("人民"), _T("KG"));  //替换字符串
    //返回替换的次数

    str1 = _T("中华人民共和国中国人abcBkjh");
    x = str1.Remove(_T('b'));//删除指定的所有字符,返回删除的次数,区分大小写
    //只能删除字符,不能删除字符串
    x = str1.Delete(1,3);  //删除指定范围的字符
    //参数1   起始位置
    //参数2  删除的个数

    //修改:
    str1 = _T("中华人民共和国中国人abcBkjh");
    str1.SetAt(2, _T(''));  //修改指定字符
    //参数1   字符序号;参数2 改成这个字符

    str = str1.GetAt(1);  //提取指定序号的字符
    str1 = _T("中华人民共和国中国人abcBkjh");
    TCHAR ch1= str1.GetAt(1);  //提取指定序号的字符
    str = ch1;
    str = str1[2];   //提取指定序号的字符
    //这种形式不能修改,只能读。str1[2] = _T('D');这是错误的

//转换 //数值转换成字符串,方法一 函数,方法二 format _itot_s(x, ch, 10); //整数转换成TCHAR字符串 str.Format(_T("%d"), 100); //把数值转换成字符串 //TCHAR转换成Cstring,直接赋值就行 TCHAR ch2[] = _T("中国人"); str = ch2; //TCHAR字符串转换成Cstring字符串 str = _T("范冰冰"); TCHAR *p1= str.GetBuffer();//把Cstring字符串转换成TCHAR字符串.锁定字符串的缓冲区长度,返回字符串的地址指针 str.ReleaseBuffer();//解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能 //注意:GetBuffer()与ReleaseBuffer() 成对使用 TCHAR *p2 = (LPTSTR)(LPCTSTR)str; //把Cstring字符串转换成TCHAR字符串.返回str的地址指针 TCHAR *p3 = _T("456"); x= _ttoi(p3); SetDlgItemText(label1, str); SetDlgItemText(label2, p2); }

  

//插入
str.Insert(2, _T('x'));//把字符插入到序号2的位置
str.Insert(2, _T("abc"));//把字符串插入到序号2的位置

 str1=str.SpanExcluding(_T("cf"));//返回字符串中与参数中任意字符匹配的第一个字符之前的子串  

 

str = _T("abcdef");
str1= str.SpanIncluding(_T("fdcba")); //从字符串中查找与参数中任意字符不匹配的字符,并返回第一个不匹配字符之前的字串abcd

str.Format(_T("%d"), 13);    //格式化字符串 

 

 

 

string

视频教程1

视频教程2

<string>是C++标准库头文件

需要   #include <string>    //没有.h

 using namespace std;    

 

 

//定义
    string strstr = "我是谁";
    wstring str;//定义字符串对象
    //string  定义窄字节;wstring 定义宽字节
    str = L"我是张三";  //赋值
    str.assign(L"KKKGDKKK");//赋值

    wstring str1(6, 'K');//定义字符串,赋值6个K
    TCHAR ch[10] = _T("中国人");
    wstring str2(ch);//用TCHAR字符串来初始化
    str.clear();//清空字符串
    TCHAR *pp = _T("ABCDE");
    str.assign(pp); //用TCHAR指针来赋值
    str.assign(pp, 2);//用TCHAR指针来赋值,指定字符个数
    str.assign(pp, 2,3);//用TCHAR指针来赋值,从第2个字符开始,复制3个字符

    ch[0] = str.at(1);  //提取指定序号字符
    str2= str.at(1);  //提取指定序号字符
    str2 = str[0];  //提取指定序号字符

    str2 = ch;//TCHAR字符串转换成wstring字符串,直接赋值就行
    const TCHAR *p = str.c_str(); //把wstring字符串转换为TCHAR*
    //c_str()返回的是一个临时指针

    str = L"我是张三";
    int x = str.size();//返回字符串的有效字符数
    bool bl = str.empty();   //判断字符串是否为空

    //字符串的连接
    str += L" 我喜欢看书";//字符串的连接
    str = str + L" 我也喜欢看电影";//字符串的连接

    str1 = L"我是中国人";
    str = L"我是张三";
    str.append(str1);//str1连接到str的尾部
    str = L"我是张三";
    TCHAR ch1[] = L"我喜欢C++";
    str.append(ch1);//TCHAR字符串连接到str的尾部
    str = L"我是张三"; 
    str.append(str1,2,3);//str1连接到str的尾部,从第2个字符开始,复制3个字符
    str = L"我是张三";
    str.append(str1, 1); //str1连接到str的尾部, 从第1个字符开始复制
    str = L"我是张三";
    str.append(ch1,3);//TCHAR字符串连接到str的尾部,复制前3个字符
    str = L"我是张三";
    str.append(ch1, 2,3);//TCHAR字符串连接到str的尾部,从第2个字符开始,复制3个字符

    //字符串的比较
    str = L"abCde";
    str1 = L"abcde";
    bl = str == str1;  // 判断字符串是否相等
        // != 不等于;>;<;>=;<=
    wstring a(L"aBcdef");
    wstring aa(L"AbcdEf");
    wstring b(L"Abcdef");
    wstring c(L"123456");
    wstring d(L"123dfg");
    int m = a.compare(b);//a减去b的ASCII码,>0返回1,<0返回-1,相同返回0
    m = aa.compare(1, 3, b); // 比较
    //aa从1开始拿出3个的字符串和b比较
    m = a.compare(3, 3, b, 3, 3);//比较
    //a从1开始拿出3个的字符串;b从1开始拿出3个的字符串;再比较

    //提取
    str = L"我是张三,我特别喜欢看书,我喜欢看电影";
    str1=str.substr(5, 7);  //提取子串
    //从第5个字符开始,提取7个
    str1 = str.substr(5);  //提取子串
    //从第5个字符开始到结尾

    //查找位置
    x = str.find(L"喜欢");//查找字符串,返回位置索引号
    //没找到,返回 -1
    x = str.find(L"喜欢",10);//查找字符串,从索引号10位置开始找.返回位置索引号
    //没找到,返回 -1
    x = str.rfind(L"喜欢");//查找字符串,从后往前找,返回位置索引号
    //没找到,返回 -1

    //替换
    str1 = str.replace(6, 4, L"喜欢");
    //序号6位置开始的4个字符,替换成"喜欢"

    //插入
    str = L"我是张三";
    str.insert(4, L"我喜欢看电影"); //在序号4的位置插入字符串
    str = L"我是张三";
    str.insert(1, 3,L'A');  //在序号1的位置插入3个字符A

    //删除
    str = L"我是张三";
    str.erase(1, 2);  //从序号1开始删除2个字符

 

 以上代码在MFC中

 

函数:

int x = sizeof(ch);    返回字符串的字节大小   

包括 \0

TCHAR ch2[10];
_itot_s(x, ch2, 10);     整数转换成字符串

参数1  整数值        参数2 字符串    参数3 进制

int x = _ttoi(_T("654"));      字符串转换成整数

TCHAR ch2[10]=_T("321");
int x = _ttoi(ch2);  //参数可以是TCHAR字符串、TCHAR字符串指针、Cstring字符串

 

 

 

 

 

 

 

天子骄龙:生命诚可贵 时光价更高

转载于:https://www.cnblogs.com/liming19680104/p/10493667.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值