stoi(data.substr(1, data.length()));是啥意思
时间: 2024-04-03 14:31:59 浏览: 180
这行代码的作用是将字符串 `data` 中从第二个字符开始到结尾的子串转换为整数类型。
具体来说,`data` 是一个字符串对象,`substr` 函数是字符串类中的一个函数,用于截取子串。`substr(1, data.length())` 表示截取从第二个字符开始到结尾的子串。然后 `stoi` 函数将截取得到的子串转换为整数类型,返回结果。
需要注意的是,`substr` 函数中的第一个参数表示截取子串的起始位置,从 0 开始计数。因此,`substr(1, data.length())` 表示从第二个字符开始截取。
相关问题
stoi(data.substr(1, data.length()));,换一种形式书写
可以将这行代码分成两部分来写:
1. 先截取子串:`data.substr(1, data.length())`,表示从字符串 `data` 的第二个字符开始截取到结尾的子串。
2. 将截取得到的子串转换为整数类型:`stoi(str)`,其中 `str` 是截取得到的子串。因此,可以将原来的代码改写为:
```
string substr = data.substr(1, data.length()); // 截取子串
int num = stoi(substr); // 将子串转换为整数类型
```
这样写更加直观,易于理解。
实现函数sort #include<iostream> using namespace std; #define MaxSize 20 typedef char KeyType; typedef struct { //字母 KeyType character; //字频 int count; } RedType; void merge(RedType SR[], RedType TR[], int i, int m, int n) { } void Sort(RedType SR[], RedType TR1[], int s, int t) { } int main() { //统计结果,已经按字母序排好序 RedType SR[MaxSize]; //按照字频排序后的结果 RedType TR1[MaxSize]; string data; int i = 0; //读取输入 while (i < MaxSize && cin >> data) { SR[i].character = data[0]; SR[i++].count = stoi(data.substr(1, data.length())); if (cin.get() == '\n') { break; } } //排序 Sort(SR, TR1, 0, i - 1); //打印排序后的结果 for (int j = 0; j < i; ++j) { cout << TR1[j].character << TR1[j].count << " "; } }
下面是使用归并排序对 RedType 数组按照字频进行排序的 C++ 代码实现:
```cpp
#include<iostream>
using namespace std;
#define MaxSize 20
typedef char KeyType;
typedef struct {
//字母
KeyType character;
//字频
int count;
} RedType;
//归并排序合并两个有序序列
void merge(RedType SR[], RedType TR[], int i, int m, int n) {
int j = m + 1;
int k = i;
while (i <= m && j <= n) {
if (SR[i].count <= SR[j].count) {
TR[k++] = SR[i++];
} else {
TR[k++] = SR[j++];
}
}
while (i <= m) {
TR[k++] = SR[i++];
}
while (j <= n) {
TR[k++] = SR[j++];
}
}
//归并排序
void Sort(RedType SR[], RedType TR1[], int s, int t) {
if (s == t) {
TR1[s] = SR[s];
} else {
int m = (s + t) / 2;
RedType TR2[MaxSize];
Sort(SR, TR2, s, m);
Sort(SR, TR2, m + 1, t);
merge(TR2, TR1, s, m, t);
}
}
int main() {
//统计结果,已经按字母序排好序
RedType SR[MaxSize];
//按照字频排序后的结果
RedType TR1[MaxSize];
string data;
int i = 0;
//读取输入
while (i < MaxSize && cin >> data) {
SR[i].character = data[0];
SR[i++].count = stoi(data.substr(1, data.length()));
if (cin.get() == '\n') {
break;
}
}
//排序
Sort(SR, TR1, 0, i - 1);
//打印排序后的结果
for (int j = 0; j < i; ++j) {
cout << TR1[j].character << TR1[j].count << " ";
}
return 0;
}
```
在主函数中,先读取输入的统计结果,然后调用`Sort`函数进行排序,最后输出排序后的结果。`Sort`函数使用归并排序算法进行排序,先将原始序列分成两个子序列,分别对两个子序列进行排序,最后将两个有序子序列合并成一个有序序列。`merge`函数用于合并两个有序序列,具体实现过程中,先将原始序列复制到临时数组中,然后分别从两个子序列中取出较小的元素放入目标序列中,直到有一个子序列为空,最后将剩余的元素依次放入目标序列中。
阅读全文