在用户输入的数组中查找值

时间:2014-07-03 01:43:37

标签: c++ arrays return-value cin

我试图在用户先前输入值的数组中找到任何用户输入的值。 我做了以下工作来查找在数组中输入的值 但似乎无法知道在哪里插入循环以查找用户输入的搜索值

确定 更新

我正在寻找一种方法来查找用户在之前输入的数组中输入的值 如果它的逻辑

,这样的东西

确定第二次更新

这就是我一直在努力的方面 我很震惊 未找到输入的搜索值

#include<iostream>
#include<conio.h>

using namespace std;

void main ()
{
    int a[10], found;

    for(int i=0;i<10;i++)
{
    cout<<"enter value : ";
    cin>>a[i];
}

    cout<<"Enter Searching Value :";
    cin>>found;

    for(int i=0;i<10;i++)
{
    if(found == a[10])
{
    cout<<"Value Found";
    _getch();
}
        else if (found != a[10])
            cout<<"Value Not Found";

}

    _getch();

}

3 个答案:

答案 0 :(得分:1)

工作解决方案

你在这里解决一个发现问题。您没有任何建议,输入的值可能是,所以你应该逐步尝试每一个。这是一个常见问题。

解决它的第一种方法是使用循环。它不是现代C ++的好方法。但你应该尝试一下练习。

bool has(int val, int const* arr, size_t size) {
    size_t idx = 0;
    // Iterates each element of array and checks
    // whether the one is equal to the `val`. In
    // case of meeting of `val`, the loop stops.
    while (idx < size && arr[idx] != val) ++idx;
    return idx != size;
}

以下方式更方便。实际上,has标题中的C ++标准库中已经有<algorithm>函数的更一般形式。它被称为find。它完全相同,但更好。实际上,有许多函数可以解决<algorithm>标题中的常见问题。你必须在任何地方使用它。

bool has_(int val, int const* arr, size_t size) {
    int const* end = arr + size;
    // Now `has_` don't iterate each element and
    // checks it. It finds the `val` in range
    // between the first element of array and
    // the last.
    return std::find(arr, end, val) != end;
}

我建议你阅读小节&#34; Prefer算法调用手写循环。&#34;在&#34; STL:容器&#34;在书里 "C++ Coding Standarts" by Herb Sutter and Andrei Alexandrescu 获得关于为什么使用<algorithm>标题的直觉。

另外,您可以找到对<algorithm>标题here的引用。

解决方案中的错误

让我们考虑您的代码并讨论为什么最终会出错。实际上,你刚刚输入了一个拼写错误。
这是使用<algorithm>标题而不是像你这样的手写循环的原因之一。

#include<iostream>
#include<conio.h>

using namespace std;

void main()
{
    int a[10], found;

    for (int i = 0; i<10; i++)
    {
        cout << "enter value : ";
        cin >> a[i];
    }

    cout << "Enter Searching Value :";
    cin >> found;

    for (int i = 0; i<10; i++)
    {
        // Look at here: you compare entered value ten times
        // with the value after the last element of array.
        if (found == a[10])
        {
            // In case that you found an entered value in array
            // you just continue the loop. You should probably
            // break it at this point. This may be achieved by
            // using the `brake` operator or the `while` loop.
            cout << "Value Found";
            _getch();
        }
        else if (found != a[10])
            cout << "Value Not Found";

    }

    _getch();

}

答案 1 :(得分:-1)

我认为这个答案可以解决你的问题.. :)

#include<iostream>
#include<conio.h>

using namespace std;

void main ()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        cout<<"enter value : ";
        cin>>a[i];
    }
    int random;
    cin>>random;
    int flag=0;
    for(int i=0;i<10;i++)
    {
       if(a[i]==random)
       {
         flag=1;
         cout<<"Found at a["<<i<<"]"<<endl;
         break;
       }
    }
    if(flag==0)
    cout<<"element not found"<<endl;
    return 0;
}

答案 2 :(得分:-3)

您的问题是整数数组在已分配和未分配之间没有明确的定义。你需要一种方法来“标记”这些整数。您可以使用布尔值的奇偶校验数组执行此操作,该数组将基于std :: cin.fail()进行标记,或者使用int *并使用NULL进行标记。有很多方法可以做到这一点。

std::vector<int*> a(10);
for(int i=0;i<10;i++){
  int input;
  cout<<"enter value : ";
  cin >> input;
  if(!cin.fail()) {
    a[i] = new int(input);
  }else{
    cin.clear(std::ios_base::failbit);
  }
}

现在,您可以测试向量a的NULL指针。