int zhuanhua(char c){ int i; switch(c){ case 'I': return i=1; case 'V': return i=5; case 'X': return i=10; case 'L': return i=50; case 'C': return i=100; case 'D': return i=500; case 'M': return i=1000; }}int romanToInt(char * s){ int i=strlen(s); int *sum=(int*)malloc(i*sizeof(int)); for(int j=0;j<i;j++){ sum[j]=zhuanhua(s[j]); } int k=0; for(int l=0;l<i;l++){ if(l==i-1){ k=k+sum[l]; } else if(sum[l]<sum[l+1]){ k=k-sum[l]; } else{ k=k+sum[l]; } } return k;}错在哪里
时间: 2024-01-15 14:02:36 浏览: 31
这段代码中存在一些问题:
1. 函数 `zhuanhua()` 中定义了变量 `i` 但未初始化,应该改为 `int i = 0;`。
2. 函数 `zhuanhua()` 中应该添加一个 `default` 分支,防止输入其他非法字符时出现未定义行为。
3. 函数 `romanToInt()` 中的指针 `sum` 未在使用结束后释放内存,可能会造成内存泄漏。
4. 函数 `romanToInt()` 中的变量 `k` 应该初始化为 0,以免出现未定义行为。
修改后的代码如下所示:
```
int zhuanhua(char c) {
int i = 0;
switch(c) {
case 'I': i = 1; break;
case 'V': i = 5; break;
case 'X': i = 10; break;
case 'L': i = 50; break;
case 'C': i = 100; break;
case 'D': i = 500; break;
case 'M': i = 1000; break;
default: break;
}
return i;
}
int romanToInt(char *s) {
int i = strlen(s);
int *sum = (int*)malloc(i * sizeof(int));
for(int j = 0; j < i; j++) {
sum[j] = zhuanhua(s[j]);
}
int k = 0;
for(int l = 0; l < i; l++) {
if(l == i-1) {
k += sum[l];
} else if(sum[l] < sum[l+1]) {
k -= sum[l];
} else {
k += sum[l];
}
}
free(sum);
return k;
}
```