【string一些函数用法的补充】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

string类对象的修改操作

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+=(重点)在字符串后追加字符串str
c_str(重点)返回C格式字符串
find + npos(重点)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

string中插入和查找等使用代码演示

注意:

  1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般 情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。
  2. 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。

我们来看 c_str 返回c格式的字符串的操作:

第一个参数:要的是c的字符串。

c++兼容c语言,c++是从c语言中生长出来的,c++中的某些标准库是沿用了c语言的,所以有时候得使用 c 得用法。比如:

void test_string9()
{
	string s1("hello world");

	string filename("test.cpp");//filename:是string的对象,是c++的
	FILE* fout = fopen(filename.c_str(), "r");//fopen:第一个参数要c的字符串地址,所以有了 //c_str() 来让c++兼容c
}

int main()
{
	test_string9();

	return 0;
}

我们来看 rfind 和 substr 的操作:

//[0, 9]
//[0, 10) 左闭右开,右 - 左 = 个数
void test_string10()
{
	//string s1("file.cpp");
	string s1("file.c.tar.zip");

	// 拿到文件的后缀
	size_t pos1 = s1.rfind('.');//rfind:从后往前找
	if (pos1 != string::npos)
	{
		string suffix = s1.substr(pos1);
		//size:是有效字符串的长度;对于下标而言,是'\0'的位置
		//string suffix = s1.substr(pos1, s1.size()-pos1);

		cout << suffix << endl;
	}
	else
	{
		cout << "没有后缀" << endl;
	}

	string url2("https://legacy.cplusplus.com/reference/string/string/substr/");
	string url1("http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=65081411_1_oem_dg&wd=%E5%90%8E%E7%BC%80%20%E8%8B%B1%E6%96%87&fenlei=256&rsv_pq=0xc17a6c03003ede72&rsv_t=7f6eqaxivkivsW9Zwc41K2mIRleeNXjmiMjOgoAC0UgwLzPyVm%2FtSOeppDv%2F&rqlang=en&rsv_dl=ib&rsv_enter=1&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1588&rsv_sug4=6786");

	string protocol, domain, uri;//协议、域名、
	size_t i1 = url1.find(':');
	if (i1 != string::npos)
	{
		protocol = url1.substr(0, i1 - 0);
		cout << protocol << endl;
	}

	// strchar
	size_t i2 = url1.find('/', i1 + 3);
	if (i2 != string::npos)
	{
		domain = url1.substr(i1 + 3, i2 - (i1 + 3));
		cout << domain << endl;

		uri = url1.substr(i2 + 1);
		cout << uri << endl;
	}

	// strstr  
	size_t i3 = url1.find("baidu");
	cout << i3 << endl;

	std::string str("Please, replace the vowels in this sentence by asterisks.");
	cout << str << endl;

	// strtok
	std::size_t found = str.find_first_not_of("aeiou");
	while (found != std::string::npos)
	{
		str[found] = '*';
		found = str.find_first_not_of("aeiou", found + 1);
	}
	cout << str << endl;

	cout << (url1 < url2) << endl;

	string ss1 = "xxx";
	string ss2 = "yyy";

	string ret = ss1 + ss2;
	cout << ret << endl;

	string ret1 = ss1 + "yyyy";
	cout << ret1 << endl;

	string ret2 = "yyyy" + ss2;
	cout << ret2 << endl;

}

int main()
{
	test_string10();

	return 0;
}

find_first_not_of:

string类非成员函数

函数功能说明
operator+尽量少用,因为传值返回,导致深拷贝效率低
operator>>(重点)输入运算符重载
operator<<(重点)输出运算符重载
getline(重点)获取一行字符串
relational operators(重点)大小比较

我们来看 relational operators 的比较大小操作:

void test_string10()
{

	string url2("https://legacy.cplusplus.com/reference/string/string/substr/");
	string url1("http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=65081411_1_oem_dg&wd=%E5%90%8E%E7%BC%80%20%E8%8B%B1%E6%96%87&fenlei=256&rsv_pq=0xc17a6c03003ede72&rsv_t=7f6eqaxivkivsW9Zwc41K2mIRleeNXjmiMjOgoAC0UgwLzPyVm%2FtSOeppDv%2F&rqlang=en&rsv_dl=ib&rsv_enter=1&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1588&rsv_sug4=6786");

   cout << (url1 < url2) << endl;
}

int main()
{
	test_string10();

	return 0;
}

我们再来看 operator+ 的操作:

int main()
{
	char ch1;
	wchar_t ch2;
	char16_t ch3;
	char32_t ch4;

	cout << sizeof(ch1) << endl;
	cout << sizeof(ch2) << endl;
	cout << sizeof(ch3) << endl;
	cout << sizeof(ch4) << endl;

	// 编码   文字计算机的存储和表示
	// ascll
  //内存/硬盘 只存01
	char c1 = 'a';//存储字符时,内存或硬盘会去查表,查到字符对应的数值存储到内存中
	cout << c1 << endl;

	char c2 = 98;//取字符要显示到显示器上时,内存或硬盘会查表,查到数值对应的字符,再显示出来
	cout << c2 << endl;

	return 0;
}

int main()
{
	int i = 1234;
	double d = 11.22;
	string s1 = to_string(i);//将整型和浮点型转换成字符串
	string s2 = to_string(d);

	string s3("45.55");
	double d3 = stod(s3);//stod:将字符串转换成浮点型;stoi:将字符串转换成int类型

	cout << typeid(std::string::iterator).name() << endl;
	cout << typeid(bit::string::iterator).name() << endl;
	//typeid:
	//1、打印对象的类型;
	//2、打印类型的类型;(有些类型可能被 typedef 给重命名成了另一个名字,我们可以找到原先的类型)

	return 0;
}

总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

  • 41
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
好的,下面是一个完整的Java银行账户类account的示例代码,包含了main函数: ``` public class Account { private String accountNumber; private String accountHolderName; private double balance; public Account(String accountNumber, String accountHolderName, double balance) { this.accountNumber = accountNumber; this.accountHolderName = accountHolderName; this.balance = balance; } public String getAccountNumber() { return accountNumber; } public String getAccountHolderName() { return accountHolderName; } public double getBalance() { return balance; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { balance -= amount; } public void transfer(Account destination, double amount) { withdraw(amount); destination.deposit(amount); } public static void main(String[] args) { // 创建一个账户对象 Account myAccount = new Account("123456789", "John Smith", 1000.0); // 存款500元 myAccount.deposit(500.0); // 取款200元 myAccount.withdraw(200.0); // 创建一个目标账户对象 Account destination = new Account("987654321", "Jane Doe", 0.0); // 向目标账户转账300元 myAccount.transfer(destination, 300.0); // 输出账户余额 System.out.println("My account balance: " + myAccount.getBalance()); System.out.println("Destination account balance: " + destination.getBalance()); } } ``` 在这个示例代码中,我们定义了一个main函数,用于测试Account类的各种方法。在main函数中,我们首先创建了一个账户对象,并对其进行了一系列操作,包括存款、取款和转账等。最后,我们使用System.out.println()方法输出了账户的余额。 希望这个完整的示例代码能够帮助你更好地理解Java银行账户类account的基本概念。如果你有任何问题或需要进一步的帮助,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值