#include <iostream> #include <cstring> #include <iomanip> using namespace std; #define N 5 int findnumchconvert(char* a, int n); int main() { char* a = (char*)malloc(sizeof(char)*1024); int sum; cin.getline(a, 1024); sum = findnumchconvert(a, N); if (sum != -1) printf("%d\n", sum); else printf("no\n"); return 0; } int findnumchconvert(char* a, int n) { int i, j, sum = 0; for (i = 0, j = 1; i < strlen(a); i++) { if (a[i] >= '0' && a[i] <= '9' && ) { sum = sum * 10 + ; j++; } } if (sum) return sum; else return -1; }优化
时间: 2023-12-10 19:02:48 浏览: 71
这段代码存在一些问题,例如在 if 语句中缺少判断条件,变量 j 没有被使用,也没有释放动态分配的内存。以下是对该代码的一些优化建议:
1. 在 if 语句中加入判断条件,例如判断 a[i] 是否小于等于 '9'。
2. 可以使用更简洁的写法,例如使用 isdigit() 函数来判断字符是否是数字字符。
3. 可以将 for 循环中的 strlen(a) 提前计算出来,避免在每次循环中重复计算。
4. 不需要使用变量 j,可以直接在 sum 加入新的数字时乘以 10。
5. 在程序的末尾释放动态分配的内存。
以下是优化后的代码:
```
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int findnumchconvert(char* a, int n);
int main() {
char* a = new char[1024];
int sum;
cin.getline(a, 1024);
sum = findnumchconvert(a, N);
if (sum != -1)
printf("%d\n", sum);
else
printf("no\n");
delete[] a;
return 0;
}
int findnumchconvert(char* a, int n) {
int i, sum = 0;
int len = strlen(a);
for (i = 0; i < len; i++) {
if (isdigit(a[i])) {
sum = sum * 10 + a[i] - '0';
}
}
if (sum)
return sum;
else
return -1;
}
```
阅读全文