字符串的应用整理(C++)

自己一直对字符串这方面的概念比较模糊,缺少宏观的理解,对它的使用也是每次要用的时候就去查,刷题的时候也是常有字符串类的题目,所以准备整理一下这方面的知识,让自己对这方面有比较深刻的理解和印象。

C++中字符串的使用分为两种:

  1. C-style string(char数组)
  2. string类库

一、C-style string

字符串是存储在内存的连续字节中的一系列字符。所以存储在字节中的一系列字符意味着可以将字符串存储到char数组中,其中每个字符都位于自己的数组元素中。

1、简单语法

char a[5] = {'h', 'e', 'l', 'l', 'o'}; // This is not a string.
char b[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // This is a string.

C-style的字符串有一种特殊的性质:以空字符(null character)结尾,空字符被写作‘\0’,其ASCII码为0.

或者也可以按以下格式写

char a[] = "hello"; // true
char b[5] = "hello"; // false, because \0 is not understand.
char c[6] = "hello"; // true

不确定字符数时可以让计算机自己去识别。

此处注意:字符串常量用双引号,字符常量用单引号

2、使用标准C语言库函数

需要声明

#include <cstring>
strlen(str) // str字符串的长度
strcat(str1, str2) // 连接str1和str2
strcpy(str1, str2) // 复制str2到str1
strcmp(str1, str2) // 逐字符比较str1和str2

这里列出的就一点点,如果需要参考这个博客https://blog.csdn.net/u010177286/article/details/50333531

3、字符串的输入

cin输入

cin >> name;

Q:cin如何确定已完成字符串输入呢?

A:由于不能通过键盘输入空字符,因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符串数组输入时只能读取一个单词。读取该字符串后,cin将该字符串放到数组中,并在结尾添加空字符。

每次读取一行字符串输入

(1) getline()

getline()函数读取整行,通过回车键输入的换行符来确定输入结尾。

cin.getline(name, 20) //可以规定输入字符,如20即规定输入为19,也可以不规定。

(2) get()

该方法有多种变体,第一种与getline类似。

不能连续两次调用,因为第二次调用时接收的第一个字符就是换行,所以无法存储。

解决方式

// method 1
cin.get(name1, size);
cin.get();
cin.get(name2, size);

// method 2
cin.get(name1, size).get()

//or
cin.getline(name1, size).getine(name2, size)

二、String类

#include <string>

1、初始化及使用

string str1; // create an empty string object
string str2 = "panther"; // create and initialize

string str3 = {"hello"}; // It's ok.

str1 = str 2; // ok, copy(strcpy)
// 不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。
str3 = str1 + str2; //ok

str1 += "hhh"; // add (like strcat)

len = str1.size(); // like strlen(name) in C-style

2、输入

cin >> str;
getline(cin, str);

还有很多,参考C++ primer p76(标准库类型string),节约时间,直接截图:

需了解更多见C++ primer.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符串哈希算法是一种将字符串映射为数字的算法,常用于字符串的比较和匹配。在C++中,可以使用字符串哈希算法来加速字符串的比较操作。 引用\[1\]中的代码示例展示了一个使用字符串哈希算法的C++代码。该代码使用了前缀和数组和字符串数组来存储字符串,并通过计算哈希值来比较两个子串是否相等。其中,哈希值的计算使用了前缀和数组和幂运算。 引用\[2\]中的解释指出,使用字符串哈希的目的是为了比较字符串时不直接比较字符串本身,而是比较它们对应映射的数字。这样可以将子串的哈希值的时间复杂度降低到O(1),从而节省时间。 引用\[3\]中的代码示例也展示了一个使用字符串哈希算法的C++代码。该代码使用了前缀和数组和字符串数组来存储字符串,并通过计算哈希值来比较两个子串是否相等。与引用\[1\]中的代码类似,哈希值的计算也使用了前缀和数组和幂运算。 综上所述,字符串哈希算法是一种将字符串映射为数字的算法,常用于字符串的比较和匹配。在C++中,可以使用前缀和数组和幂运算来计算字符串的哈希值,并通过比较哈希值来判断两个子串是否相等。 #### 引用[.reference_title] - *1* [C++算法题 # 33 字符串哈希](https://blog.csdn.net/weixin_44536804/article/details/123425533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [字符串哈希(c++)](https://blog.csdn.net/qq_41829492/article/details/120980055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [AcWing 841. 字符串哈希(C++算法)](https://blog.csdn.net/YSA__/article/details/108453403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值