输入一个字符串,求该字符串中最长连续数字序列出现的起始位置及其长度。C++
时间: 2023-10-09 08:11:12 浏览: 75
好的,以下是实现思路和代码:
1. 遍历字符串,记录当前连续数字序列的起始位置和长度,同时记录最长序列的起始位置和长度。
2. 当遇到非数字字符时,判断当前连续数字序列是否比最长序列长,若是则更新最长序列的起始位置和长度。
3. 最后输出最长序列的起始位置和长度。
代码如下:
```c++
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin, s); // 输入字符串
int start = -1, len = 0; // 最长序列的起始位置和长度
int cur_start = -1, cur_len = 0; // 当前序列的起始位置和长度
for (int i = 0; i < s.length(); i++) {
if (isdigit(s[i])) { // 如果是数字字符
if (cur_start == -1) { // 如果是序列的第一个数字
cur_start = i;
cur_len = 1;
} else { // 如果是序列中的其他数字
cur_len++;
}
} else { // 如果是非数字字符
if (cur_start != -1) { // 如果当前序列已结束
if (cur_len > len) { // 如果当前序列比最长序列长
start = cur_start;
len = cur_len;
}
cur_start = -1;
cur_len = 0;
}
}
}
if (cur_start != -1 && cur_len > len) { // 处理结尾的数字序列
start = cur_start;
len = cur_len;
}
if (start == -1) { // 如果没有数字序列
cout << "No number sequence found." << endl;
} else {
cout << "The longest number sequence starts at position " << start << " and has length " << len << "." << endl;
}
return 0;
}
```
注意:这个代码中假设数字序列是指由数字字符组成的连续序列,不包括小数点、正负号等其他字符。如果需要包括这些字符,需要对代码进行相应修改。