优化以下代码 char* p = str; int numCount = 0; while (*p != '\0') { if (*p == ',' || *p == '.') { numCount++; } p++; } numCount++; // 数字个数等于分隔符个数加1 *len = numCount; int* nums = (int*)malloc(sizeof(int) * numCount); char *x = strtok(str,",."); int i = 0; while (x!= NULL) { nums[i++] = atoi(x); x = strtok(NULL, ",."); } return nums; }
时间: 2023-12-10 20:05:33 浏览: 26
char* p = str;
int numCount = 1; // 初始化为1,因为最后一个数字后面没有分隔符
while (*p != '\0') {
if (*p == ',' || *p == '.') {
numCount++;
}
p++;
}
*len = numCount;
int* nums = (int*)malloc(sizeof(int) * numCount);
char *x = strtok(str, ",.");
int i = 0;
while (x != NULL) {
nums[i++] = atoi(x);
x = strtok(NULL, ",.");
}
return nums;
```
主要的优化有两点:
1. 在计算数字个数时,初始化为1,因为最后一个数字后面没有分隔符。
2. 在使用 `strtok` 函数时,将分隔符字符串改为 ",.",这样就不需要在循环中判断分隔符是 "," 还是 "." 了。
相关问题
void fun(char *str) { char *p=str; int i=0; while(*p) {if(*p!=’ ’) str[i++]=*p; p++; } str[i]=’\0’; }
这是一个函数,函数名为 fun,参数为一个指向字符数组的指针 str。函数的功能是从 str 中删除空格,并将结果存储回 str 中。
函数内部定义了一个指向 str 的指针 p 和一个整型变量 i,初始值为 0。然后使用 while 循环遍历 str 中的每个字符,如果该字符不是空格,则将其存储到 str[i] 中,同时 i 加 1。最后在 str[i] 处添加一个字符串结束符 '\0',表示字符串的结尾。
需要注意的是,该函数会修改传入的参数 str,因此在调用该函数之前,需要确保该指针指向的内存空间是可写的。
char*p=str,*q=0; int i=0; while(p[i]!='\0') { if(p[i]>='0'&&p[i]<='9') { *q=p[i]; q++; } i++; } cout<<q;修改一下
这段代码中存在悬挂指针的问题,因为指针q没有被初始化,所以在对其进行赋值操作时会导致未知的行为。另外,最后输出的是指针q的值,而不是指针所指向的字符串。以下是修改后的代码:
```c++
char* p = str;
char* q = new char[strlen(str) + 1]; // 为指针q分配内存
int i = 0;
while (p[i] != '\0') {
if (p[i] >= '0' && p[i] <= '9') {
*q = p[i];
q++;
}
i++;
}
*q = '\0'; // 添加字符串结束符
cout << q - strlen(q); // 输出指针所指向的字符串
delete[] q; // 释放指针q所占用的内存
```
修改后的代码中,我们为指针q分配了内存,避免了悬挂指针的问题。同时,在输出指针所指向的字符串时,我们先计算出字符串的长度,再通过指针的减法操作得到字符串的起始地址,最后输出该地址即可。最后,要记得释放指针q所占用的内存。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)