Implementing a Case Insensitive String::find in CPP

The C++ string class internally stores characters in a char array, but all memory management, allocation, and null termination is handled by the string class itself, which is why it is simple to use. The length of a C++ string can be changed at runtime due to dynamic memory allocation, which is similar to vectors. Because the string class is a container class, we can iterate over all of its characters with an iterator, just like we can with vectors, sets, and maps, but we usually use a simple for loop to iterate over the characters and index them with the [] operator.

Examples:

Example 1:

Input:

string mainstring = "This is BTechGeeks"

string matchstring = "this"

Output:

Given match string is found in mainstring

Example 2:

Input:

string mainstring = "This is BTechGeeks"

string matchstring = "tis"

Output:

Given match string is not found in mainstring

In this article, we will look at how to use C++ to find a Case Insensitive Sub String in a given string.

Implementing a Case Insensitive String::find in C++

Method #1:Using std::find()

Convert both the mainstring and matchstring to lowercase.

Then use the std::string::find is used to search for substrings within a string.

Below is the implementation:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    // given main string
    string mainstring = "Hello This is BTechGeeks";
    // given to match string
    string matchstring = "BTechGeeks";
    // Converting mainstring to lower_case
    transform(mainstring.begin(), mainstring.end(),
              mainstring.begin(), ::tolower);
    // Converting matchstring to lower_case
    transform(matchstring.begin(), matchstring.end(),
              matchstring.begin(), ::tolower);
    // using find() function to find position
    int position = mainstring.find(matchstring, 0);
    // if the element is not found then position will be -1
    if (position == -1)
        cout << "given matchstring is not found in "
                "mainstring"
             << endl;
    else
        cout << "given matchstring is found at position "
             << position << endl;
}

Output:

given matchstring is found at position 14

Method #2:Using boost::icontains

We can use boost::icontains to see if a substring exists in a given string.

Below is the implementation:

#include <bits/stdc++.h>
#include <boost/algorithm/string.hpp>
using namespace std;
int main()
{
    // given main string
    string mainstring = "Hello This is BTechGeeks";
    // given to match string
    string matchstring = "BTechGeeks";
    // checking if the match string is present in main
    // string
    bool res = boost::icontains(mainstring, matchstring);
    if (res)
        cout << "Given match string is found in mainstring"
             << endl;

    else
        cout << "given matchstring is not found in "
                "mainstring"
             << endl;
}

Output:

Given match string is found in mainstring

Related Programs: