#P9680. string[_view]
string[_view]
题目背景
C++ 的 string 类是一个功能强大的字符串类,然而由于其字符串算法和内存管理绑定的机制,所以在处理 C 风格字符串时效率低下。
为了解决这个问题,C++17 标准引入了 string_view 类型,将内存管理和字符串算法分离,从而更好地适配了 C 风格字符串的处理。
题目描述
你需要模拟一个简单的 C++ 程序,该程序的每一行必然为如下两种形式之一:
string <variable-name>(<initializer>);
string_view <variable-name>(<initializer>);
其中 variable-name
为声明的变量名(保证之前未出现过,且长度不超过 ),initializer
为初始化该变量的内容,可以是:
- 字符串字面量,即用双引号引起的字符串(形如
"abc"
); - 之前出现过的变量名
source
,此时应将source
对应的字符串赋给variable-name
。
具体而言,将任意一个字符串 赋给 string 类型会进行 次字符拷贝,而赋给 string_view 类型不会拷贝字符。其中 为字符串 的长度。
你需要计算出该程序中字符拷贝的总次数。
输入格式
第一行输入一个整数 ,代表程序行数。
接下来 行,输入一段代码。
输出格式
输出一个整数,代表字符拷贝总次数。
6
string a("cxyakioi");
string_view b("cxyakapio");
string c(b);
string_view d(a);
string_view cxyakioi(c);
string cxyakapio(d);
25
提示
对于每组数据,保证代码长度均不超过 (不包括换行符)。
保证字符串字面量(除去两侧引号)和变量名中只有拉丁字母,且给定的代码严格满足题目要求。
子任务
# | 特殊性质 | 分值 |
---|---|---|
0 | 样例 | 0 |
1 | 所有变量均为 string_view 类型 | 10 |
2 | 只使用字符串字面量初始化 | 20 |
3 | - | 70 |
好消息:GCC 9.3.0 支持 string_view。
坏消息:NOI 不开 C++17。