1、string类型和const char *类型
const char类型是C语言中用来表示字符串的一种数据类型,通常以字符数组的形式表示,以空字符'\0'结尾。而string类型是C++中的标准库中提供的字符串类,是一个封装了char数组的字符串对象,可以动态地改变大小,并提供了许多字符串操作的方法。在使用上,const char类型需要手动管理内存,而string类型则由类自动管理内存,更加方便和安全。如果你在C++中进行字符串操作,推荐使用string类型。
2、C++中默认的字符串类型
在C++中,如果函数参数写了字符串,默认是const char*
类型,而不是string
类型。如果想要传递string
类型的字符串作为函数参数,可以将字符串转换为string
类型再传递。
例如:将两个字符串进行大小对比。
template<typename T>
T maxNum(T a,T b){cout<<"使用通用函数模板:";if(a > b){return a;}else{return b;}
}
template<>
string maxNum<string>(string a,string b)//比较字符串长度
{cout<<"使用(string)函数模板特化:";if(a > b){return a;}else{return b;}
}
int main()
{string str1 = "Hello";string str2 = "World";string num3 = maxNum(str1,str2);cout<<"num3 = "<<num3<<endl;string num4 = maxNum("Hello","World");cout<<"num4 = "<<num4<<endl;return 0;
}
如果使用上述特化模板函数,直接将字符串当形参输入,最后输出还是通用 模板函数
运行结果:
使用(string)函数模板特化:num3 = World
使用通用函数模板:num4 = World
要修改这个问题,需要重新写一个 const char*
类型的特化函数模板。
template<>
const char *maxNum<const char *>(const char *a,const char *b)
{cout<<"使用(const char*)函数模板特化:";if(a > b){return a;}else{return b;}
}
运行结果:
使用(string)函数模板特化:num3 = World
使用(const char*)函数模板特化:num4 = World
3、字符串长度
使用<string>库,使用length()函数
代码示例:
string compare(){ return a.length()>b.length()?a:b;
}
4、字符串拼接
使用<cstring>库,使用strcat()函数
代码示例:
strcat(newStr,other.str);//将other.str字符串拼接到newStr字符串末尾
5、字符串赋值
使用<cstring>库,使用strcpy()函数
注:字符串无法通过“=”赋值运算符直接赋值,只能通过复制的方法,将一个字符串中的内容复制到对应的字符串中。
代码示例:
strcpy(str,s);//将字符数组s中的值赋值到str中
6、字符串大小对比
比较两个字符串是否相等。
使用<cstring>库,使用strcmp()函数
注:如果两个字符串相等(每个字符都一样),输出为0
代码示例:
if(strcmp(other.str,this->str) == 0)//如果other.str和str字符串相等输出True
{return true;
}
注: 在C++中,字符串是以字符数组的形式存储的,如果直接使用">"和"<"进行比较,实际上比较的是字符串在内存中的地址,并不是比较字符串的大小。
如果要比较两个字符串大小,可以使用compare()方法,使用<string>库
代码示例:
#include <iostream>
#include <string>int main() {std::string str1 = "hello";std::string str2 = "world";if (str1.compare(str2) > 0) {std::cout << "str1 大于 str2" << std::endl;} else if (str1.compare(str2) < 0) {std::cout << "str1 小于 str2" << std::endl;} else {std::cout << "str1 等于 str2" << std::endl;}return 0;
}
运行结果
str1 小于 str2