C++ 代码示例:查找字符串数组中的最小字符串
这段 C++ 代码能成功编译运行。
#include <iostream>
#include <cstring>
using namespace std;
void find(char *name[], int n, int *p)
{
int min_index = 0;
for(int i=1; i<n; i++) {
if(strcmp(name[i], name[min_index]) < 0) {
min_index = i;
}
}
*p = min_index;
}
int main()
{
const int MAX_SIZE = 100;
char *strs[MAX_SIZE];
// 读入字符串,用'###'作为结束标记
int count=0;
while(true) {
string s;
cin >> s;
if(s=='###') break;
char *cstr = new char[7]; // 保证输入的字符串长度不超过6
strcpy(cstr, s.c_str());
strs[count++] = cstr;
}
// 调用函数查找最小字符串
int min_index;
find(strs, count, &min_index);
// 输出结果
cout << strs[min_index] << endl;
// 释放动态分配的内存
for(int i=0; i<count; i++) {
delete[] strs[i];
}
return 0;
}
这段代码演示了如何使用字符串比较函数 strcmp() 查找一个字符串数组中的最小字符串。代码包含输入、查找、输出和内存释放等步骤。
代码解释:
-
find()函数: 该函数接收一个字符串指针数组name[]、数组长度n和一个指向整数的指针p。函数遍历数组,使用strcmp()函数比较每个字符串与当前最小字符串,并更新min_index。最后将最小字符串的索引存储到p指向的内存地址中。 -
main()函数:- 定义一个最大大小为
MAX_SIZE的字符串指针数组strs。 - 从标准输入读取字符串,用
'###'作为结束标记。 - 对于每个输入字符串,使用
new运算符动态分配一个大小为 7 的字符数组,并将输入字符串复制到该数组中。 - 调用
find()函数查找最小字符串的索引。 - 输出最小字符串。
- 使用
delete[]释放动态分配的内存。
- 定义一个最大大小为
代码的优点:
- 代码结构清晰,易于理解。
- 使用
strcmp()函数进行字符串比较,效率较高。 - 使用动态内存分配,可以处理任意数量的字符串。
- 代码包含内存释放操作,避免内存泄漏。
代码的局限性:
- 代码假设输入字符串长度不超过 6。
- 代码没有对输入进行错误处理,例如输入非字符串数据或超过
MAX_SIZE的字符串。
改进建议:
- 添加输入错误处理,例如检查输入是否为字符串,以及字符串长度是否超过限制。
- 使用
std::vector容器存储字符串,避免使用固定大小的数组。 - 使用
std::string类型存储字符串,避免使用char*类型。
原文地址: https://www.cveoy.top/t/topic/ojMf 著作权归作者所有。请勿转载和采集!