gpt4 book ai didi

c++ - 在数组 C++ 中搜索字符串索引

转载 作者:行者123 更新时间:2023-11-27 23:12:17 24 4
gpt4 key购买 nike

我试图找到数组中元素的索引....我设法使用以下函数使其与整数一起工作:

int *getIndexOfInt(int *arr, int size, int check) {
int *result;
int *k;
int count = 0;
for (int i = 0; i <= size - 1; i++) {
if (arr[i] == check) {
k[count] = i;
count++;
}

}
if (count > 0) {
*result = *k;
return result;
} else
cout << "Not Found";
}

但是,当我对字符串尝试这样做时,它只是给了我错误(程序以状态 11 退出)或无限循环:

int *getIndexOfString(string *arr, int size, string check) {
int *result;
int *k;
int count = 0;
for (int i = 0; i <= size - 1; i++) {

if (arr[i] == check) {

k[count] = i;
count++;
}

}

if (count > 0) {

*result = *k;
return result;
}
else cout << "Not Found";
}

能否请您告诉我原因并帮助我修复错误?

编辑:结果变量是随后在主函数中使用的数组,它包含在给定数组中找到字符串的索引。k 变量只是一个数组,在将值添加到结果之前将值存储在其中。 arr 是给定的字符串数组,大小是给定的大小,检查是代码将搜索的字符串。

最佳答案

首先,您正在访问未初始化的内存。奇怪的是,您的第一个代码有效。但是,它可能是特定于编译器的(这些事情在 C++ 中经常发生)。

局部变量通常分配在堆栈上,C++ 不保证任何默认值。因此,一种可能的解释是(在保存指针的同一内存地址上)另一个有效指针。现在,当您创建这个局部变量时,它只是获得了这个“旧”地址,因此它正在访问一些以前分配的内存。只是暂时不要关心它,即使它有效,相信我们 - 你不应该依赖它。 :-)

另一个问题是返回值。当您不知道该数组的大小时,您将如何使用它?你应该返回类似 std::vector<> 的东西,一些结构或类似的东西。不仅仅是指向未知长度数组的指针!

结果:您的代码太复杂了。查看更好的解决方案:

#include <iostream>
#include <string>
#include <vector>

std::vector<int> getIndexes(std::vector<std::string> &input, std::string searched) {
std::vector<int> result;

for (int i = 0; i < input.size(); i++) {
if (input[i] == searched) {
result.push_back(i);
}
}

return result;
}

int main(int argc, char *argv[]) {
std::vector<std::string> greetings;
greetings.push_back("hello");
greetings.push_back("hi");
greetings.push_back("bye");
greetings.push_back("hi");
greetings.push_back("hello");
greetings.push_back("bye");

std::vector<int> indexes = getIndexes(greetings, "hi");

for (int i = 0; i < indexes.size(); i++) {
std::cout << indexes[i] << std::endl;
}

return 0;
}

关于c++ - 在数组 C++ 中搜索字符串索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com