C++ cstring strncmp() - Compare String Parts

Updated on November 14, 2024
strncmp() header image

Introduction

The strncmp() function in C++ is a standard library function used to compare a specified number of characters from two C-style strings. This function is particularly useful for scenarios where only a portion of the string needs to be compared rather than the entire string. It provides a controlled comparison, making it ideal for handling prefixes and managing string inputs that follow a specific format.

In this article, you will learn how to effectively utilize the strncmp() function in various string comparison scenarios. Discover how this function can help in checking prefixes, comparing sub-strings up to a certain length, and ensuring the accuracy of parsed data when dealing with user inputs or network communications.

Using strncmp() in C++

Compare Fixed Number of Characters

  1. Include the C++ header <cstring> which contains the declaration for strncmp().

  2. Define two C-style strings you want to compare.

  3. Decide the number of characters you wish to compare.

  4. Use strncmp() to compare the strings up to the specified number of characters.

    cpp
    #include <cstring>
    #include <iostream>
    
    int main() {
        const char* str1 = "HelloWorld";
        const char* str2 = "HelloEarth";
        int n = 5;
    
        int result = strncmp(str1, str2, n);
        if (result == 0) {
            std::cout << "First " << n << " characters are the same." << std::endl;
        } else {
            std::cout << "First " << n << " characters are different." << std::endl;
        }
        return 0;
    }
    

    This code compares the first 5 characters of str1 and str2. If they are the same, it prints that the characters are the same; otherwise, it prints that they are different. strncmp() returns 0 if the characters match.

Understanding Return Values of strncmp()

  1. Recognize that strncmp() returns an integer.

  2. Interpret the return values appropriately:

    • 0 if the compared parts are equal.
    • Negative value if the first unmatched character in the first string is less than the corresponding character in the second string.
    • Positive value if the first unmatched character in the first string is greater than the corresponding character in the second string.
    cpp
    int result = strncmp("abc", "abd", 2);
    std::cout << "Result: " << result << std::endl;
    

    In this example, since only the first two characters are compared and they are identical in both strings, strncmp() returns 0.

Practical Application: Checking String Prefixes

  1. Check if a string starts with a particular prefix using strncmp().

  2. Provide the prefix and the number of characters based on the length of the prefix.

    cpp
    const char* filename = "report.txt";
    int prefix_length = 6;
    const char* prefix = "report";
    
    if (strncmp(filename, prefix, prefix_length) == 0) {
        std::cout << "Filename starts with 'report'." << std::endl;
    } else {
        std::cout << "Filename does not start with 'report'." << std::endl;
    }
    

    This example checks if filename starts with the prefix "report". It uses strncmp() to compare the first 6 characters of filename with "report". If they match, it confirms the filename starts with the given prefix.

Conclusion

The strncmp() function in C++ provides a powerful and flexible method for comparing parts of strings up to a specified number of characters. It is essential for developing applications where precise string handling is indispensable, such as validating user inputs, checking file prefixes, or processing commands. By mastering the usage of strncmp(), ensure robust handling of string comparisons in your C++ projects, leading to more reliable and efficient code.