在数组C ++中查找字符串元素

时间:2016-04-19 20:14:10

标签: c++

我找到了这样的其他主题,但没有一个正在发挥作用,无论我输入什么,它都会一直返回-1。 Idk为什么,谢谢!

if(combobox.Selectedindex==-1)
{
MessageBox.Show("Please Select an item");
}

else
{
MessageBox.Show("An Item was selected");
}

2 个答案:

答案 0 :(得分:1)

您可以使用标准C ++中提供的函数std :: string :: find。有关如何使用它的示例,请参阅this link

特别需要开发两个主要步骤:

  1. 在函数中找到你写的你找到包含该名称的数组索引(或者如下例所示的向量);
  2. 然后你需要在字符串里面找到逗号的位置(通过查找标准库的函数),然后提取包含位于逗号后面两个位置的数字的子字符串。您可以使用substr函数执行此操作。
  3. 下面是使用vector而不是array的示例代码。

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int find(vector<string> arr, string seek)
    {
        for (int i = 0; i < arr.size(); ++i)
        {
           if (arr.at(i).find(seek) != string::npos) {
            return i;
        }
       return -1;
        }
    }
    
    int main()
    {
        vector<string> info;
        info.push_back("Becky Warren, 678-1223");
        info.push_back("Joe Looney, 586-0097");
        info.push_back("Geri Palmer , 223-887");
        info.push_back("Lynn Presnell, 887-1212");
        info.push_back("Holly Gaddis, 223-8878");
        info.push_back("Bob Kain, 586-8712");
        info.push_back("Tim Haynes, 586-7676");
        info.push_back("Warren Gaddis, 223-9037");
        info.push_back("Jean James , 678-4939");
        info.push_back("Ron Palmer, 486-2783" );
    
        cout<<"Please enter a name and you will be returned a phone number"<<endl;
        string name;
        cin>>name;
    
        // x is the string in the array containing the name written by the user
        int x = find(info, name);
    
        // Check if at least one was found
        if(x == -1)
        {
            cout << "Name " << name << " not found." << endl;
            return -1;
        }
    
        // extract number from the found string (find comma position and then take a substring starting from that position until the end
        int commaPosition = info.at(x).find(",");
        string phoneNumber = info.at(x).substr(commaPosition+2);
        cout<<"Phone number found: " << phoneNumber<< endl;
    
        system("pause");
    
        return 0;
    }
    

答案 1 :(得分:1)

你的问题是你的返回 - 1应该在for循环之后。当你检查你的字符串是否在数组中的某个位置时,你只执行一次,因为在if语句之后程序看到返回-1这意味着&#34;哦,我现在应该退出函数并返回-1& #34 ;.

for (int i = 0; i < len; ++i)
 {
     if (arr[i].find(seek) != string::npos)return i; 
 }
 return -1;

当你遇到这么简单的问题时,我建议你使用调试器,它会告诉你你在程序中到底做了什么。