十六、C++字符串(一)

这篇具有很好参考价值的文章主要介绍了十六、C++字符串(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

十六、C++字符串(一)

1、原生字符串实现将两个字符串拼接
//原生字符串实现将两个字符串拼接
#include <iostream>
#include <locale>
int main()
{
    char strA[0x10] = "123";  //定义字符串
    char strB[0x10] = "456";

    setlocale(LC_ALL, "chs");
    char strC[0x20];         //定义一个临时的字符数组
    memcpy(strC,strA,strlen(strA));  //先通过memcpy将字符串A放入临时字符数组中
    memcpy(strC + strlen(strA), strB, strlen(strB)+1);  //再将字符串B拼接到临时字符数组,加1是为了将字符串结尾的0也拷贝进来
    std::cout << strC<<std::endl;
}
2、std::string

​ std::string是C++提供的字符串声明类,利用std::string可以声明一个C++的字符串,但是需要引入头文件string

1)std::string字符串的声明

//std::string字符串声明
std::string str{"吃葡萄不吐葡萄皮!"};
std::cout<<str;
std::cin>>str;
//std::string字符串声明使用
#include <iostream>
#include <string>
int main()
{
	std::string str{ "吃葡萄不吐葡萄皮!asdjki" };
	std::cout << str << std::endl;
	std::string strA;
	std::cout << "请输入下一句:";
	std::cin >> strA;
	std::cout << strA<<std::endl;
}

十六、C++字符串(一)

2)字符串的截取

//字符串的截取语法一
std::string 变量名称{"字符串",要截取的长度};

//字符串的截取语法二
std::string 变量名称{"字符串",起始位置,要截取的长度};

注:字符串的截取,对中文支持不佳
//字符串截取示例
#include <iostream>
#include <string>
int main()
{
	std::string strA{ "HelloWorld",5 };  //截取前5个字符Hello
	std::cout << strA << std::endl;

	std::string strB{ "你好我的世界",3 };  //对中文截取支持不佳
	std::cout << strB << std::endl;

	std::string strA{ "HelloWorld",0,5 }; //从第0位开始,截取5位
}

十六、C++字符串(一)

//要求输入用户的ID,但是限定用户的ID位数为6,若用户过多输入,只截取6位
#include <iostream>
#include <string>
int main()
{
	std::string strA{ };  
	std::cout << "请输入你的用户ID:";
	std::cin >> strA;
	std::string Id{ strA,0,6 };
	std::cout << "你输入的用户ID为:" << Id << std::endl;
}

十六、C++字符串(一)

5)字符的复制

//字符的复制语法
std::string 变量名称(要复制的个数,'字符');

//字符的复制用法
str::string str(6,'a');
std = 'aaaaaa'
//字符的复制用法
#include <iostream>
#include <string>
int main()
{
	std::string strA(6,'a');  //是圆括号,不是大括号
	std::cout << strA << std::endl;

	std::string strB( 6,97 );  //也可使用ascii码代替字符
	std::cout << strB << std::endl;
}

十六、C++字符串(一)

6)字符串的连接

//字符串的连接用法
std::string str(6,'a');
str = str+"123";
str = "aaa123";
//str = "sss"+"sss";   //错误用法
//字符串的连接用法示例
#include <iostream>
#include <string>
int main()
{
	std::string strA,strB;
	strA = "qwer";
	strB = strA +"  " +  "wasd" + "123";  //必须先要有一个string类型的变量进行拼接

	std::cout << strB << std::endl;
}

十六、C++字符串(一)

7)连接字符串和数字

//连接字符串和数字语法
std::string std::to_string(数字);   //即将数字转化为string类型的变量
std::string str = std::to_string(123);
str = "123";

十六、C++字符串(一)

#include <iostream>
#include <string>
int main()
{
	std::string strA, strB;
	strA = "用户的的年龄是:";
	strB = strA + std::to_string(3.14f);  //将字符串和数字进行拼接,可以支持float类型的数
	std::cout << strB;
}

十六、C++字符串(一)

2、std::string的进阶

1)字符串的连接

std::string str;
//str = "123" + "456"; //错误用法

//正确拼接方法
str=string{"123"}+"456";  //通过临时变量连接字符串
//str="456"+"123"+string{"123"};    //错误用法,运算优先级问题
str="456"+("123"+string{"123"});
//字符串拼接
#include <iostream>
#include <string>
using std::string;
int main()
{
	string strA, strB;
	strA = string{ "123" } + "abc";  //通过临时变量连接字符串
	strB = "qwer" + ("123" + string{ "www" });  //解决运算优先级问题

	std::cout << strA << std::endl;
	std::cout << strB << std::endl;
}

十六、C++字符串(一)

2)其他字符串拼接方法

//其他字符串拼接方法
string strA,strB;
strB="abc""def"  //去掉加号,但是拼接的必须是两个常量,用处很少
#include <iostream>
#include <string>
#define softName "JXQY"
#define softVersion "2.1"
using std::string;
int main()
{
	string strA;
	strA = softName softVersion;  //连接两个字符串常量,需要有一个空格
	std::cout << strA << std::endl;

}

十六、C++字符串(一)

3)通过append连接字符串

//append连接字符串
std::string str;
.append();  //append方法可以连接一个字符串
str.append("s");
//append连接字符串使用
#include <iostream>
#include <string>
using std::string;
int main()
{
	string strA{"qwer"};
	strA.append("123456").append("www"); //可以无限的使用append拼接字符串
	std::cout << strA << std::endl;
	strA.append(10, 'a');  //拼接10个a
	std::cout << strA << std::endl;
}
//append是改变原来的字符串

十六、C++字符串(一)

4)字符串的截取(substr)

//字符串截取语法
.substr(起始位置,要截取的长度);

std::string str{"123456"};
std::string strsub{str.substr(1)}; //得出strsub="23456"
std::string strsubA{str.substr(1,3)};  //strsubA="234"

//注:strsub()是将截取后的字符串放到一个新的字符串变量中
//字符串截取substr用法
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "123456" };
	std::string strB;
	strB = strA.substr(3);  //从第3位开始截取,不会改变原来的字符串
	std::cout << "截取前的字符串为:" << strB << std::endl;
	std::cout << "截取后的字符串为:" << strB << std::endl;

	strB = strA.substr(2,2);  //从第2位开始截取,截取2位
	std::cout << "从指定位置截取后的字符串为:" << strB << std::endl;
}

十六、C++字符串(一)

5)字符串长度计算(length)

//字符串长度计算(length)语法
std::string.length();   //得到字符串的长度
std::string strA{"123"};
str.length(); //返回结果3
 
//注:对中文支持不良
//字符串长度计算(length)示例
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "123456" };
	std::string strB{ "123456你好" };
	std::cout << "字符串A的长度为:" << strA.length() << std::endl;
	std::cout << "字符串B的长度为:" << strB.length() << std::endl;
}

十六、C++字符串(一)

3、字符串补充知识

1)访问string字符串中的字符

std::string strA{"0123456789ABC"};
strA[0] = '0';  //访问字符串的第0个字符
strA[10] = 'A';  //访问字符串的第10个字符

注:中文支持不佳
//输入一个10进制的数,将其转化为16进制
#include <iostream>
#include <string>
int main()
{
	int userIn;
	std::string strA{ "0123456789ABCDEF" };
	std::cout << "请输入一个十进制的数:";
	std::cin >> userIn;
	std::cout << "转化后的十六进制数为:" << strA[userIn] << std::endl;
}

十六、C++字符串(一)

2)string字符串的比较(法一)

​ string字符串可以用比较运算符和另外一个string字符串或者C标准的字符串(char*)来进行比较,支持的比较运算符有==、!=、>、<、>=、<= ,比较的原则为依次进行字符大小的比较

//string字符串的比较
string strA{"abcd"};
string strB{"bcde"};
结果为:strB>strA
//原生字符串,无法判断两个字符串是否相等
#include <iostream>
#include <string>

int main() 
{
	char* strA{ (char*)"123456" };
	char* strB{ (char*)"123456" };
	char* strC = new char[10];
	if (strA == strB)        //strA和strB是两个字符类型的指针,
	{
		std::cout << "strA和strB的地址相等" << std::endl;  //此处相等,因为两个指针指向的内存地址一样,为操作系统优化的结果
	}
	std::cout << "请输入字符串C的值:";
	std::cin >> strC;
	if (strA == strC)
	{
		std::cout<< "strA和strC的值相等" << std::endl;
	}
	else
	{
		std::cout << "strA和strC的值不相等" << std::endl;
	}
}

十六、C++字符串(一)

//string字符串的比较用法
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "abcdef" };
	std::string strB;
	std::string strC{ "bcdefg" };
	std::cout << "请输入strB字符串的值:";
	std::cin >> strB;
	if (strA == strB)        
	{
		std::cout << "strA和strB的值相等" << std::endl;
	} else std::cout << "strA和strB的值不相等" << std::endl;
	if (strA > strC)
	{
		std::cout << "strA>strC" << std::endl;
	}else  std::cout << "strA<strC" << std::endl;
}

十六、C++字符串(一)

3)string字符串的比较(法二)

​ .compare()是string类型自带的一个方法,可以用来比较与另一个string字符串或C标准字符串的大小,比较完成后返回的是一个int类型的值。若两个字符串相等返回0,若大于返回负数,小于返回负数

//compare()字符串比较函数用法
string strA{"abcd"};
strA.compare("abcd"); //相等返回0
strA.compare("bcdef"); //小于返回负数
strA.compare("ABCD");  //大于返回正数

//如下用法无法得到正确结果
if(strA.compare("abcd")) //错误用法
//compare()字符串比较函数示例
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "abcd" }; 
	std::cout << strA.compare("abcd") << std::endl;   //等于返回0
	std::cout << strA.compare("bcde") << std::endl;;  //小于返回-1
	std::cout << strA.compare("ABCD") << std::endl;;  //大于返回1
}

十六、C++字符串(一)

4)compare()函数的扩展用法一

//语法
.compare(起始位置,参与比较的长度,被比较的字符串);  //将截取的字符串与被比较的字符串进行比较

//示例
string strA{"abcd cdef"};
strA.compare(5,4,"cder"); //从第5个位置开始,截取4个字符进行比较,返回0
//compare()扩展用法
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "abc def xyz" };
	std::cout << strA.compare(4,3,"def") << std::endl;   //返回0
	std::cout << strA.compare(4, 3, "defa") << std::endl;   //返回-1
	std::cout << strA.compare(4, 3, "ABC") << std::endl;   //返回1
}

十六、C++字符串(一)

5)compare()函数的扩展用法二

//compare()函数的扩展用法二
.compare(起始位置,参与比较的长度,被比较的字符串,被比较的字符串起始长度,被比较的字符串起始长度);

//简单示例
string strA{"abcd cdef ghijk"};
strA.compare(5,4,"cdef ghijklm",0,4); //返回0

6)字符串的搜索

​ find()函数是string类型自带的一个方法,用来搜索字符串中的内容,并且返回内容所在的位置,当返回值为std::string::npos时,表示未找到

//字符串搜索find()语法
.find(要搜索的内容,开始搜索的位置);
.find(要搜索的内容,开始搜索的位置,要纳入搜索的长度);

//字符串搜索示例
string strA{"abcd cdef ghijk"};
strA.find("cdef");  //返回值为5
strA.find("cdef",6); //从第6个位置开始查找,返回值为std::string::npos
strA.find("cdef",0,2) //返回值为2,等同于从位置0开始搜索cd
//输出学生的学号
#include <iostream>
#include <string>

int main()
{
	std::string strA{ "username:50001,studentId:10010" };
	std::string studentId;
	std::cout << strA.find("studentId:") << std::endl;  //studentId在字符串中的起始位置
	studentId = strA.substr(strA.find("studentId:")+9);
	std::cout << "学生学号为:" << studentId << std::endl;
}

十六、C++字符串(一)

7)字符串的搜索(逆向搜索)

​ ·rfind()是string类型自带的一个方法,用来搜索字符串中的内容,并且返回内容所在的位置,当返回值为std::string::npos时,表示未找到,与find不同的是,rfind是从字符串末端开始查找的。

//rfind()语法
.rfind(要搜索的内容);
string strA{"abcd cdjk ghijk"};
strA.rfind("jk")  //返回值为13

十六、C++字符串(一)文章来源地址https://www.toymoban.com/news/detail-747036.html

到了这里,关于十六、C++字符串(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Golang】十六进制字符串转二进制字符串

    在计算机科学中,我们经常需要在不同进制的数字之间进行转换。Go语言提供了一系列的标准库来方便我们进行这些进制转换。本文将介绍如何使用Go语言将十六进制字符串转换为二进制字符串。 首先,我们定义一个函数 hexToBinary 用于执行这个转换。该函数接受一个十六进制

    2024年02月02日
    浏览(50)
  • 【华为OD机考 统一考试机试C卷】两个字符串间的最短路径问题(C++ Java JavaScript Python)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月02日
    浏览(57)
  • 【华为OD机考 统一考试机试C卷】两个字符串间的最短路径问题(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年01月25日
    浏览(45)
  • Python字符串比较:如何判断两个字符串是否相等?

    Python字符串比较:如何判断两个字符串是否相等? 在Python编程中,字符串是最常用的数据类型之一。当我们需要比较两个字符串时,通常需要判断它们是否相等。这篇文章将详细介绍Python中比较两个字符串的方法。 使用“==”运算符比较字符串 在Python中,可以使用“==”运算

    2023年04月11日
    浏览(69)
  • 将两个字符串合并为一个字符串并且输出(二)

    在这个示例中,我们定义了三个字符数组变量 str1 、 str2 和 result ,分别用于存储第一个字符串、第二个字符串和合并后的结果字符串。 我们首先使用 strcpy 函数将第一个字符串复制到结果字符串中,然后使用 strcat 函数将第二个字符串追加到结果字符串的末尾。 最后,我们

    2024年02月12日
    浏览(47)
  • C语言第二十六弹---字符串函数(下)

    ✨ 个人主页:   熬夜学编程的小林 💗 系列专栏:   【C语言详解】   【数据结构详解】 目录 1、strncat 函数的使用 2、strncmp 函数的使用 3、strstr 函数的使用和模拟实现 4、strtok 函数的使用 5、strerror 函数的使用 6、perror 函数的使用 总结 • Appends the first num characters of sourc

    2024年02月20日
    浏览(61)
  • 【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等

    点我直达~ 使用双指针法 大致过程如下: 使用双指针,分别读(read),写(write)指针,读指针不断向后走,当read指针走到最后位置处时,或read和read的下一个位置与当前位置不相等时,说明该read指针走到了某一串相同子串的最后位置处。 此时write指针开始记录具体的字符

    2024年02月08日
    浏览(50)
  • python 如何将十六进制值转换为字符串?

    Python 中提供了几种将十六进制值转换为字符串的方法,下面将介绍其中的三种方法。 bytes.fromhex() 方法可以将十六进制字符串转换为字节串,然后再将字节串转换为字符串。例如: 其中, bytes.fromhex() 方法将十六进制字符串转换为字节串, byte_str.decode(\\\"utf-8\\\") 方法将字节串转

    2023年04月23日
    浏览(50)
  • JAVA 十六进制与字符串的转换浅谈

      笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发现存在一个问题--字符串转为16进制后再转回来,英文正常,中文出现乱码 笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发

    2024年02月07日
    浏览(44)
  • 1657. 确定两个字符串是否接近

    1657. 确定两个字符串是否接近(面试题打卡/中等) 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/determine-if-two-strings-are-close 题干: 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde - aecdb 操作

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包