打印匹配序列的编号,在用户给定的输入中为常量输入
Print number of matching sequence in the user given input for the constant input
我写了一段代码来获取用户输入序列中出现的序列数。
这是我的密码。它排除了我希望测试的子序列。
我需要考虑12,23,341232341234作为序列。
不应考虑序列重叠(123中的12个不应考虑)。
例如,常数1234
用户给定号码124312341211423
输出:找到的序列号4
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
string num1;
string seq;
cout << "Enter constant number: ";
cin >> num1;
cout << "Enter the sequence: ";
cin >> seq;
int count=0;
for (int t=0; t<=num1.size()-2; t++)
{
string num = num1;
for (int k = num1.size(); k>=2-t ;k--)
{
cout << num <<"n";
if (t==2 && k<=2)
break;
//num=num.substr(t,t+k-1);
for (int j = 1; seq.find(num) != string::npos; j++)
{
seq = seq.substr(0,seq.find(num)) + " " + seq.substr(seq.find(num)+num.size());
count = count + 1;
}
num = num.substr(t,t+k-1);
}
cout<< seq << "n";
}
cout << "No. of sequences found: " << count << "n";
return 0;
}
嗨,我试着运行你的代码,结果发现它输出了5个序列。我想你的要求是想弄清楚为什么不是4。
我将提出几个建议:
- 应该调整for循环和形成
num
的逻辑,以测试num1
的所有子字符串,使每个子字符串的长度至少为2个字符 - 将最内部的for循环更改为while循环,因为迭代器
j
实际上什么都不做 - 在最内部循环的每次迭代中调用
string::find()
一次。String::find()
是昂贵的,并且您在不更改参数的情况下调用它三次 - 从for循环中取出
num
的声明,使其只声明一次
以下是这些建议的有效结果:
您会注意到,我添加了一个变量numStart
来保存seq
中num
开头的位置,从而允许执行建议#3。
我还将cout << seq << "n"
移动到最内部的循环中,这样每次找到序列时都可以看到seq
的状态。
int main() {
string num1;
string num;
string seq;
cout << "Enter constant number: ";
cin >> num1;
cout << "Enter the sequence: ";
cin >> seq;
int count=0;
for (int t=0; t<=num1.size(); t++) {
for (int k = num1.size(); k>t+1; k--) {
num = num1.substr(t, k-t);
size_t numStart = seq.find(num);
while (numStart != string::npos) {
seq = seq.substr(0, numStart) + " " + seq.substr(numStart + num.size());
count++;
numStart = seq.find(num);
cout << seq << "n";
}
}
}
cout << "No. of sequences found: " << count << "n";
return 0;
}
我希望这能有所帮助!
相关文章:
- #定义c-预处理器常量..我做错了什么
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 检查输入 std::array 指针数据是否等于某个常量数组
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- boost::split会在输入字符串不是常量时更改输入字符串吗?
- 打印匹配序列的编号,在用户给定的输入中为常量输入
- 输入迭代器必须具有常量解引用运算符吗
- 输入参数类型"常量双 *&"是什么意思?
- C++常量字符*输入
- 为const输入参数传递非常量对象
- 如何通过接受用户输入来设置类的常量成员值
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 要求用户输入常量
- 常量变量乘以用户输入
- 获取 boost::p rogram_options 将输入视为常量字符*而不是 std::string
- 为什么 std::make_pair 是按值而不是常量引用获取输入
- 有没有办法声明函数的输入参数必须是常量引用
- 为什么很少有人输入常量正确的代码?将const-correct代码编译更好/更快
- 以常量引用作为输入的函数
- 如何输入int64_t / uint64_t常量