2015-12-20 315 views
0

我正在尝试编写函数,它在char*数组中搜索char *元素,并且函数start检查此元素,如果元素存在于数组中,我将“找到“,如果不是,则应该”插入“并将元素添加到数组中。在C++中查找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; 
    } 
} 
+7

你是不是准备好使用poiners和数组,这是专家们先进的低层次的语言特点。请使用'std :: string'和'std :: vector'。 –

+0

当您将字符指针与另一个字符指针进行比较时,您并未比较它们的值。你正在比较他们在记忆中的位置。你必须像这样检查它们:strcmp(a,b)== 0; – Paulo

回答

2

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; 

    } 


} 
0

关于你的函数几句话:

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"; 
} 
+0

非常好。但我认为你的'for'循环与'arr_begin','arr_end'是错误的。其中的每一个都是指向内存中任何位置的char *的指针,而不是数组元素本身的位置。本身。 'for(auto i = myArray; i!=&myArray [n]; ++ i)' – Keith

+0

@Keith您可能是对的:)刚刚编辑。 – Ziezi

+0

@指向数组的第一个元素的指针,当增加'n'次时,其中'n = array-size'将100%到达最后一个元素,因为“数组是一个以**连续记忆**“。 – Ziezi