【问题标题】:Find char* element in array of char* in C++在 C++ 中的 char* 数组中查找 char* 元素
【发布时间】:2015-12-20 23:42:40
【问题描述】:

我正在尝试编写在char* 数组中搜索char * 元素的函数,并且函数开始检查该元素,如果该元素存在于数组中,我将“找到”,如果不是,它应该是“插入”并将元素添加到数组中。

我写了这段代码,但我不知道如何尝试,程序总是给我异常,我该怎么做才能检查指针数组中的元素?

void checkFunction(char*myArray[], char *element,bool flag)
{
    for (int i = 0; i < strlen(*myArray) ; ++i)
    {
        if (myArray[i] == element)
        {
            flag = true;
        }
    }
    *myArray = element;
    flag = false;

    if (flag)
    {
        cout << "Found" << endl;
    }
    else
    {
        cout << "Inserted" << endl;
    }
}

【问题讨论】:

  • 您还没有准备好使用指针和数组,它们是面向专家的高级低级语言功能。请使用std::stringstd::vector
  • 当你比较一个 char 指针和另一个 char 指针时,你不是在比较它们的值。您正在比较他们在记忆中的位置。你必须像这样检查它们:strcmp(a, b) == 0;

标签: c++ arrays function pointers void


【解决方案1】:

C++方式

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, const char * argv[]) {

    vector<string> myStrings { "One", "Two", "Three" };

    // std::find()  finds the first element that matches a value
    auto it = find(begin(myStrings), end(myStrings),  "Twooo");
    if (it != end(myStrings)) {
        cout << "We found this string; do something..." << endl;

    }


}

【讨论】:

    【解决方案2】:

    关于您的功能的几点说明:

    1.为什么需要第三个参数bool flag,而不是作为局部变量?

    2.如果你想扩展一个数组,你应该将旧的复制到一个新分配的元素,然后添加新元素,你不能这样做:*myArray = element;

    3.如果要遍历数组长度/大小,而不是:

    for (int i = 0; i < strlen(*myArray) ; ++i)
    

    向您的函数传递一个附加参数,该参数指示数组中元素的数量。

    使用std::stringstd::vector,您可以执行以下操作:

    void check_insert (std::vector<std::string>& v, std::string& c) {
    
        for (auto i = 0; i < v.size(); ++i) {
            if (v[i] == c) {
                std::cout << "Found!\n";
                return;
            }
        }
    
        v.push_back(c);
        std::cout << "Inserted!\n";
    }
    

    【讨论】:

    • 大部分都不错。但我认为您的for 循环与arr_beginarr_end 是错误的。其中每一个都是指向内存中任何位置的char* 的指针,而不是数组元素本身的位置。本身。 for(auto i = myArray; i != &amp;myArray[n];++i)
    • @Keith 指向数组第一个元素的指针,当递增n 倍时,n = array-size 将 100% 到达最后一个元素,因为“数组是分配的对象的同质序列在连续内存中。”
    • 是的,完全正确。但是,您现在删除的代码将 arr_begin 设置为第一个元素中包含的值,而不是第一个元素的地址。
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多