0

我制作了一个 c++ 字符串,它将使用 find 和 substring 命令分成子字符串,并且我一直遇到子字符串超过指示的问题。它们应该是没有数字的句子。

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int main() {
  string questions = "1. pog 2. pog2 3. pog3 4. pog4";
int q1in = questions.find("1.");
int q2in = questions.find("2.");
int q3in = questions.find("3.");
int q4in = questions.find("4.");
int q5in = questions.find("5.");
int q6in = questions.find("6.");
int q7in = questions.find("7.");
string q1 = questions.substr(q1in,q2in);
string q2 = questions.substr(q2in,q3in);
string q3 = questions.substr(q3in,q4in);
string q4 = questions.substr(q4in,q5in);
q1.erase (0,2);
q2.erase (0,2);
q3.erase (0,2);
q4.erase (0,2);
cout << q1 << endl;
cout << q2 << endl;
cout << q3 << endl;
cout << q4 << endl;
}
4

2 回答 2

0

您正在传递下一个子字符串开始的索引,而不是将长度传递给substr方法。尝试这个

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int main() {
  string questions = "1. pog 2. pog2 3. pog3 4. pog4";
int q1in = questions.find("1.");
int q2in = questions.find("2.");
int q3in = questions.find("3.");
int q4in = questions.find("4.");
int q5in = questions.find("5.");
int q6in = questions.find("6.");
int q7in = questions.find("7.");
string q1 = questions.substr(q1in,(q2in-q1in));
string q2 = questions.substr(q2in,(q3in-q2in));
string q3 = questions.substr(q3in,(q4in-q3in));
string q4 = questions.substr(q4in,(q5in-q4in));
q1.erase (0,2);
q2.erase (0,2);
q3.erase (0,2);
q4.erase (0,2);
cout << q1 << endl;
cout << q2 << endl;
cout << q3 << endl;
cout << q4 << endl;
}
于 2020-12-03T14:30:05.300 回答
0

的第二个参数substr是长度,而不是索引 - 字符串类是古老的并且有一个有点令人惊讶的接口。(我已经记不清我错了多少次了。)

你要

string q1 = questions.substr(q1in, q2in - qin1);

等等。

也可以直接去掉“标签”,

string q1 = questions.substr(q1in + 2, q2in - qin1 - 2);
于 2020-12-03T14:32:02.210 回答