w3resource

C++ File handling: Search for string with line number in text file

C++ File handling: Exercise-11 with Solution

Write a C++ program to search for a specific string in a text file and display its line number(s).

Sample Solution:

C Code:

#include <iostream>   // Including the input/output stream library
#include <fstream>    // Including the file stream library
#include <string>     // Including the string handling library
#include <vector>     // Including the vector container

// Function to display the content of a file
void displayFileContent(const std::string & filename) {
  std::ifstream file(filename); // Open file with given filename for reading
  std::string line; // Declare a string to store each line of text

  if (file.is_open()) { // Check if the file was successfully opened
    std::cout << "File content:" << std::endl; // Displaying a message indicating file content
    while (std::getline(file, line)) { // Read each line from the file
      std::cout << line << std::endl; // Display each line of the file
    }
    file.close(); // Close the file
  } else {
    std::cout << "Failed to open the file." << std::endl; // Display an error message if file opening failed
  }
}

// Function to search for a string in a file and display line numbers where it is found
void searchAndDisplayLineNumbers(const std::string & filename, const std::string & searchStr) {
  std::ifstream file(filename); // Open file with given filename for reading
  std::string line; // Declare a string to store each line of text
  std::vector<int> lineNumbers; // Vector to store line numbers where the search string is found
  int lineNumber = 1; // Variable to track the current line number

  while (std::getline(file, line)) { // Read each line from the file
    if (line.find(searchStr) != std::string::npos) { // Check if the search string is found in the line
      lineNumbers.push_back(lineNumber); // Store the line number where the search string is found
    }
    lineNumber++; // Increment the line number counter
  }

  file.close(); // Close the file after reading

  if (!lineNumbers.empty()) { // Check if any line numbers were stored
    std::cout << "String \"" << searchStr << "\" found at line number(s): "; // Display a message indicating the search string was found

    for (int i = 0; i < lineNumbers.size(); ++i) { // Loop through the stored line numbers
      std::cout << lineNumbers[i]; // Display each line number

      if (i != lineNumbers.size() - 1) {
        std::cout << ", "; // Display a comma between line numbers, except for the last one
      }
    }

    std::cout << std::endl; // Move to the next line after displaying line numbers
  } else {
    std::cout << "String \"" << searchStr << "\" not found in the file." << std::endl; // Display a message indicating the search string was not found
  }
}

int main() {
  std::string filename = "test.txt"; // File to search
  displayFileContent("new_test.txt"); // Display content of "new_test.txt"
  std::cout << std::endl; // Output a newline for formatting

  std::string searchStr = "currently"; // String to search
  searchAndDisplayLineNumbers(filename, searchStr); // Search for the string in the file and display line numbers where it's found

  return 0; // Return 0 to indicate successful execution
}

Sample Output:

File content:
CPP is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup.
First released in 1985 as an extension of the C programming language, it has since expanded significantly over time.
Modern CPP currently has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation.
It is almost always implemented in a compiled language.
Many vendors provide CPP compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.
Here are some exercies of C++.

String "currently" found at line number(s): 3

Explanation:

In the above exercise -

  • The function searchAndDisplayLineNumbers() takes two parameters: filename (the name of the text file to search) and searchStr (the string to search for).
  • The program opens the file using std::ifstream and iterates over each line using std::getline.
  • For each line, it checks if it contains the search string using std::string::find. If the search string is found in a line, it stores the line number in a std::vector<int>.
  • After searching the entire file, the input file is closed.
  • If the lineNumbers vector is not empty, it displays the line number(s) where the search string was found.
  • Otherwise, it displays a message indicating that the search string was not found.

Note: Content of a file is displayed using displayFileContent("filename.txt").

Flowchart:

Flowchart: Search for string with line number in text file.

CPP Code Editor:

Contribute your code and comments through Disqus.

Previous C++ Exercise: Split a large text file.
Next C++ Exercise: Encrypt text file using a simple algorithm.

What is the difficulty level of this exercise?



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/cpp-exercises/file-handling/cpp-file-handling-exercise-11.php