#include<iostream> using namespace std; int main(){ int n,count=1; int maxn=-1; cin>>n; char m[n]={0}; char c; for(int i=0;i<n;i++){ cin>>m[i]; } for(int i=0;i<n;i++){ if(m[i+1]==m[i]){ count++; } else{ if(count>maxn){ maxn=count; c=m[i]; } count=1; } //TODO } cout<<c<<" "<<maxn; return 0; }这段代码有改进的地方吗
时间: 2023-06-22 22:34:00 浏览: 86
#include_iostream.h_
4星 · 用户满意度95%
这段代码可以改进的地方有:
1. 对于字符数组的定义,应该使用动态内存分配,而不是栈上的数组,因为 n 的大小可能会非常大,导致栈溢出。
2. 在计算最长连续字符序列时,应该在循环条件中减去1,因为在循环内部访问了 i+1 的元素,如果在循环结束后再比较,会导致访问越界。
3. 在计算最长连续字符序列时,应该将计数器 count 的初始值设为 0,而不是 1,因为当前字符也应该被计入连续字符序列中。
4. 对于字符数组中的字符,应该使用单引号而不是双引号。
5. 在输出结果时,应该先判断是否存在最长连续字符序列,如果不存在,则不输出结果。
改进后的代码如下:
```
#include<iostream>
using namespace std;
int main(){
int n, count = 0, maxn = -1;
cin >> n;
char* m = new char[n];
char c;
for(int i = 0; i < n; i++){
cin >> m[i];
}
for(int i = 0; i < n - 1; i++){ // 循环条件中减去1
if(m[i+1] == m[i]){
count++;
}
else{
if(count >= maxn){ // 修改判断条件
maxn = count;
c = m[i];
}
count = 0; // 初始值设为0
}
}
if(maxn >= 0){ // 判断是否存在最长连续字符序列
cout << c << " " << maxn + 1;
}
delete[] m; // 释放动态分配的内存
return 0;
}
```
阅读全文