【问题标题】:Search for a String in a Struct [closed]在结构中搜索字符串 [关闭]
【发布时间】:2011-12-16 17:51:32
【问题描述】:

好的,我在让它工作时遇到问题,所以有人可以帮我解决这个问题吗?我正在尝试让用户搜索站名,如果找到它,则输出它,如果没有则退出..

struct Trains 
{
    int Train_Id;                   //train ID
    string Station_Origin;             //Station of Origin
    string Destination_Station;        //Station of Destination
    int Departure_Time ;            //Departure Time
    int Arrival_Time ;              //Arrival Time
};

struct Trains  myArray[10];

struct station
{
    string intermediate_station1;      //intermediate_station1
    int Arrival_time1;             // Arrival time to station1 
    string intermediate_station2;      //intermediate_station2
    int Arrival_time2;             // Arrival time to station2 
    string intermediate_station3;     // intermediate_station1
    int Arrival_time3;             // Arrival time to station3   
};


struct station myArray1[3];

/*****************************************************************************/

int main ()
{
     /*  Setting up Train and Station Information  */ 
    int N_TRAIN;
    int n; 
    int a;

    do 
    {
         cout  << " Enter number of Trains on Track: " <<endl;

         cin >> N_TRAIN;
         cout << endl;        
    }while(N_TRAIN > 10 || N_TRAIN < 0);

    for(n=0; n < N_TRAIN; n++)
    {
        while((cout<<" Enter Train ID: ")&&( (cin>>myArray[n].Train_Id)||myArray[n].Train_Id <0))
        {
            cout<<" Invalid Input! Please Enter Train ID: "<<endl;
            cin.clear();
            cin.ignore(1000,'\n'); 
        }

        cout << " Name of Station of Origin: ";
        cin >> myArray[n].Station_Origin;

        cout << " Name of Destination Station: ";
        cin >> myArray[n].Destination_Station;

        while((cout<<"Enter Departure Time: Please Enter 24hr!")&&(!(cin>>myArray[n].Departure_Time)||myArray[n].Departure_Time < 0))
        {
            cout<<" Invalid Input! Enter Departure Time: Please Enter 24hr !"<<endl;
            cin.clear();
            cin.ignore(1000,'\n'); 
        }

        while((cout<<" Enter Arrival Time: Please Enter 24hr! ")&&(!(cin>>myArray[n].Arrival_Time)||myArray[n].Arrival_Time < 0))
        {
            cout<<" Invalid Input! Enter Arrival Time: Please Enter 24hr! "<<endl;
            cin.clear();
            cin.ignore(1000,'\n');    
        }

        cout << " Name of Station of intermediate station1: ";
        cin >> myArray1[a].intermediate_station1;    

        while((cout<<" Enter Arrival Time For intermediate station1: Please Enter 24hr! ")&&(!(cin>>myArray1[a].Arrival_time1)||myArray1[a].Arrival_time1 < 0))
        {
            cout<<" Invalid Input! Enter Arrival Time: Please Enter 24hr! "<<endl;
            cin.clear();
            cin.ignore(1000,'\n'); 
        }

        cout << " Name of Station of intermediate station2: ";
        cin >> myArray1[a].intermediate_station2;


        while((cout<<" Enter Arrival Time For intermediate station2: Please Enter 24hr! ")&&(!(cin>>myArray1[a].Arrival_time2)||myArray1[a].Arrival_time2 < 0))
        {
            cout<<" Invalid Input! Enter Arrival Time For intermediate station2: Please Enter 24hr!"<<endl;
            cin.clear();
            cin.ignore(1000,'\n'); 
        }

        cout << " Name of Station of intermediate station3: ";
        cin >> myArray1[a].intermediate_station3;    

        while((cout<<" Enter Arrival Time For intermediate station3: Please Enter 24hr!")&&(!(cin>>myArray1[a].Arrival_time3)||myArray1[a].Arrival_time3 < 0))
        {
            cout<<" Invalid Input! Enter Arrival Time For intermediate station3: Please Enter 24hr!"<<endl;
            cin.clear();
            cin.ignore(1000,'\n'); 
        }
   }

    /* SEARCHING BY STATION NAME: */        
    else if (choice == 3)
    {
        int origin;
        int result;

        for (n=0; n < N_TRAIN ;n++)
        {       

            cout << " Enter the Name of Departure Station: " ;
            cin >> origin;

            origin = searchfs();
            if (origin = myArray[n].Station_Origin )
               cout << "Trains Departs " << " " <<myArray[n].Station_Origin << "at" << " " << myArray[n].Departure_Time << " " << " Hours " <<endl;

            else if   (origin = myArray[n].Destination_Station )
                cout << "Trains Departs " << " " <<myArray[n].Destination_Station << "at" << " " << myArray[n].Departure_Time << " " << " Hours " <<endl;

            else if  (origin =  myArray1[a].intermediate_station1 )      
                cout << "Trains Departs " << " " <<  myArray1[a].intermediate_station1<< "at" << " " << myArray1[a].Arrival_time1 << " " << " Hours " <<endl;

            else if  (origin =  myArray1[a].intermediate_station2 )
                cout << "Trains Departs " << " " <<  myArray1[a].intermediate_station2 << "at" << " " << myArray1[a].Arrival_time2 << " " << " Hours " <<endl;

            else if  (origin =  myArray1[a].intermediate_station3 )
                cout << "Trains Departs " << " " <<  myArray1[a].intermediate_station3<< "at" << " " << myArray1[a].Arrival_time3 << " " << " Hours " <<endl;

            else if (result == -1)
                cout << " Train doesnt not Depart at "<< " " << origin << endl;
    }
}

【问题讨论】:

  • 这太多的代码无法交给我们,而关于您的方法不起作用的细节也太少了。
  • 此外,您可以用实际字符替换 HTML 实体 - 这将使您的代码更具可读性。例如。而不是&amp;lt; 只需写&lt;
  • @Thilo - 抱歉,这实际上是我最初的编辑之一 - 使用了错误的格式选项。
  • 另外,不要将couts 置于循环条件中,这只会造成混淆。
  • 原始要求是什么?该结构真的假设包含 3 个站点吗?

标签: c++ arrays string struct while-loop


【解决方案1】:

在几个地方,您似乎有分配(单 =),您打算在其中测试相等性(双 ==),如下例所示:

if (origin = myArray[n].Station_Origin)

此外,Station_Originintermediate_station1/2/3 定义为 std::string,而 origin 定义为 int。您正在尝试将 string 分配或比较 int

【讨论】:

  • 我需要做些什么来修复该搜索以使其能够正常工作,因为我有其他一切工作但不是那个部分。我希望程序做的是让用户选择输入一个站名,如果站是他们的输出,如果不是,则转到下一个字符串,如果不存在,则对该字符串进行搜索,转到下一个字符串直到找到车站,如果没有找到出口..
  • @David:仅基于您显示的代码,在您想要比较两个值的地方使用== 运算符而不是=。此外,您可能希望将origin 更改为字符串变量。这也意味着更改您的 searchfs() 函数以返回一个字符串。
【解决方案2】:

您还没有告诉我们发生了什么,所以我们只能通过扫描代码来猜测。让我印象深刻的一件事是:

for(n=0; n < N_TRAIN; n++)
{
    ...
}      
else if (choice == 3)
{
}

choice 未定义。
您如何解决尽可能多的错误消息,然后告诉我们让您感到困惑的具体问题。

【讨论】:

  • 好的,我将 Origin 从 int 更改为 String.. 我无法弄清楚的是“origin = Searchfs()”我不知道我需要在 () 中放置什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
相关资源
最近更新 更多