hailey
hailey

Reputation: 11

C++ Menu and String Searching within Array

When I enter this code and try to run it, it isn't working when the user selects option 1, to enter some text and a string to search for within their text. It outputs "enter text" and then "enter string to search" immediately after, without giving the user the chance to input some text. What is wrong?

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <algorithm>

using namespace std;

string s1, text;

int rand(int*);
int Array[100];
void sortArray(int[], int);
void showArray(const int [], int);

 int main()
 {
     while (1)

    // Menu to prompt user choice
     {
         char choice[1];

             cout << endl;
             cout << endl;
             cout << "--MENU--" << endl;
             cout << "1. Pattern Matching" << endl; // search for string within text
             cout << "2. Sorting Techniques" << endl; // generate and then sort 10 random numbers
             cout << "Enter your choice: " << endl;
             cout << endl;
             cin >> choice;
             cout << endl;

         if (choice[0] == '1') // string search option

        {
            cout << "Enter text:" << endl; // accept text from user
            getline (cin, s1);

            cout << "Enter string to search:" << endl; // accept string to search from user
            getline (cin, text);

            int pos = s1.find(text); // finds position where the string is located within text

            if (pos >= 0)
            {
                cout << "Found '" << text << "'" << " at position " << pos + 1 << "." << endl;
            }
            else
            {
                cout << "Did not find text." << endl;
            }

         }

Upvotes: 1

Views: 1034

Answers (2)

Bob Brown
Bob Brown

Reputation: 1

It looks as though you are defining some sort of char array for the user response. I would tend to make that a non-zero integer type with an exception if the choice is neither 1 nor 2. There are also some shortcuts for output formatting that reduces lines of code. Also, you would want to include the standard string class to accept the string. Maybe try something like the following:

#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <algorithm>

using namespace std;

string s1, text;

int rand(int*);
int Array[100];
void sortArray(int[], int);
void showArray(const int [], int);

 int main()
 {
     while (1)

    // Menu to prompt user choice    

 {
     int choice;

         cout << "\n--MENU--\n"l;
         cout << "1. Pattern Matching\n"; // search for string within text
         cout << "2. Sorting Techniques\n"; // generate and then sort 10 random numbers
         cout << "Enter your choice:\n";
         cin >> choice+"\n";

if (choice == 1 && choice > 0 && choice != 0) // string search option

    {
        cout << "Enter text:" << endl; // accept text from user
        getline (cin, s1);

        cout << "Enter string to search:" << endl; // accept string to search from user
        getline (cin, text);

        int pos = s1.find(text); // finds position where the string is located within text

        if (pos >= 0)
        {
            cout << "Found '" << text << "'" << " at position " << pos + 1 << ".\n";
        }
        else
        {
            cout << "Did not find text.\n";
        }

     }}}

Upvotes: 0

Captain Obvlious
Captain Obvlious

Reputation: 20063

This is because cin >> choice reads part of the current input line for the choice entered by the user. The first getline() call reads the remaining part of the input line immediately following the choice entered by the user. You need to ignore the rest of the input line after the choice.

cin >> choice;
cin.ignore(numeric_limits<streamsize>::max(), '\n');

You will also need to add #include <limits> to the beginning of your code in order to pull in numerical_limits.

Upvotes: 2

Related Questions