C++ Program to pass a string to the function


Any programming language that uses functions has code that is simpler, more modular, and simpler to change while being debugged. Functions are a remarkably beneficial component in a modular piece of code. A function can take arguments and perform certain operations on them. Like other primitive datatypes, we can also pass object types or arrays as an argument. In this article, we will see how to pass string-type data as a function argument in C++.

Passing C++ like string argument to a function

C++ supports stronger string objects which is actually a class with different member functions associated with them. A string object passing as an argument is similar to the passing of normal primitive datatypes. The syntax is also quite similar.

Syntax

<return type> function_name ( string argument1, string argument2, … ) {
   // function body
}

In the following example, we will see a program to check whether a given string is a palindrome or not. There will be two functions, one will reverse the string, and another will check whether the string is palindrome or not. Let us see the algorithm and corresponding C++ implementation.

Algorithm

  • define a function reverse(), this will take a string s
  • n := floor of (length of s / 2)
  • for i ranging from 0 to n/2; do
    • temp := s[i]
    • s[i] := s[ n - i - 1 ]
    • s[ n - i - 1 ] := temp
  • end for
  • return s
  • end of reverse() function
  • define a function isPalindrome(), this will take s
  • revS := call reverse() by passing s to reverse the string s
  • if s and revS are the same, then
    • return True
  • otherwise
    • return False
  • end if
  • end of isPalindrome() function

Example

#include <iostream> #include <sstream> using namespace std; string reverse( string s ) { char temp; int n = s.length(); for( int i = 0; i < n / 2; i++ ) { temp = s[i]; s[i] = s[ n - i - 1 ]; s[ n - i - 1 ] = temp; } return s; } string isPalindrome( string s ) { string revS = reverse( s ); if( s == revS ) { return "True"; } else { return "False"; } } int main() { cout << "Is "racecar" a palindrome? " << isPalindrome( "racecar" ) << endl; cout << "Is "abcdef" a palindrome? " << isPalindrome( "abcdef" ) << endl; cout << "Is "madam" a palindrome? " << isPalindrome( "madam" ) << endl; cout << "Is "sir" a palindrome? " << isPalindrome( "sir" ) << endl; }

Output

Is "racecar" a palindrome? True
Is "abcdef" a palindrome? False
Is "madam" a palindrome? True
Is "sir" a palindrome? False

Passing C-like character array to a function

Since C++ supports almost all that is supported by C, we can also define strings using a character array like C. To pass C-like strings to a function, it must pass a character array or a character pointer to the base address of the string. The syntaxes are like below −

Syntax

(using character pointer)

<return type> function_name ( char* <string variable>, … ) {
   // function body
}

Syntax

(using character array)

<return type> function_name ( char <string variable>[], … ) {
   // function body
}

Let us see the same example of palindrome checking with character array passing. Here the reverse() function will modify the array, so we must pass this string as a character array, not the character pointer. And the isPalindrome() will just check whether the string is the same as the reversed string, so it can take character pointer or character array, and the effect will be the same. The algorithm is similar so we are directly entering into the code.

Example

#include <iostream> #include <cstring> #include <cstdlib> using namespace std; void reverse( char s[] ) { char temp; int n = strlen( s ); for( int i = 0; i < n / 2; i++ ) { temp = s[i]; s[i] = s[ n - i - 1 ]; s[ n - i - 1 ] = temp; } } string isPalindrome( char* s ) { char* sRev = (char*) malloc( strlen(s) ); strcpy( sRev, s ); reverse( sRev ); if( strcmp( sRev, s ) == 0 ) { return "True"; } else { return "False"; } } int main() { string s = "racecar"; cout << "Is "racecar" a palindrome? " << isPalindrome( const_cast<char*> (s.c_str()) ) << endl; s = "abcdef"; cout << "Is "abcdef" a palindrome? " << isPalindrome( const_cast<char*> (s.c_str()) ) << endl; s = "madam"; cout << "Is "madam" a palindrome? " << isPalindrome( const_cast<char*> (s.c_str()) ) << endl; s = "sir"; cout << "Is "sir" a palindrome? " << isPalindrome( const_cast<char*> (s.c_str()) ) << endl; }

Output

Is "racecar" a palindrome? True
Is "abcdef" a palindrome? False
Is "madam" a palindrome? True
Is "sir" a palindrome? False

In this example, we see adjusting a C-like string in C++ has several steps. For C-like strings, the cstring library is used to get the length, string comparison, and other operations. From C++ string to C-string conversion, the c_str() function is needed but this function returns const char*, however, our function takes only char* type data. For such cases, we need to cast the value to char* using const_cast<char*>.

Conclusion

Functions can take primitive data types as well as arrays, object types, etc. While we are working with strings, they are object types in C++, or character array types in C. But as C++ supports C syntaxes also, it is also valid in C++. Passing a string object is straightforward, but passing a character array needs special attention and a few rigorous steps to follow to work with. The C-like strings can be passed as an array format or as character pointers. When we know the function will change the string itself, we must pass the string as a character array, otherwise, modifying string from pointers is not permissible. When the strings are only being used, we can pass using pointers or using a character array, the effects will be the same. But in such cases, passing through a character array is good because it will stop unintentional updating on strings.

Updated on: 19-Oct-2022

19K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements