Home > Article > Backend Development > C++ program to pass string to function
Any programming language that uses functions has code that is simpler, more modular, and easier to change while debugging. Functions are a very beneficial part of modular code. Functions can accept parameters and perform certain operations on them. Like other primitive data types, we can also pass object types or arrays as parameters. In this article, we will see how to pass string type data as function parameter in C.
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.
<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.
#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; }
Is "racecar" a palindrome? True Is "abcdef" a palindrome? False Is "madam" a palindrome? True Is "sir" a palindrome? False
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 −
(Use character pointer)
<return type> function_name ( char* <string variable>, … ) { // function body }
(Use 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.
The Chinese translation of#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; }
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 that there are several steps to adjusting C-style strings in C. For C-style strings, use the cstring library for length, string comparison, and other operations. To convert from C string to C string, you need to use the c_str() function, but this function returns const char*. However, our function only accepts data of type char*. For this case, we need to use const_cast
The function can accept primitive data types as well as arrays, object types, etc. When we use strings, in C they are object types and in C they are character array types. But since C also supports C syntax, it is also valid in C. Passing a string object is simple, but passing a character array requires special attention and following some strict steps. C-style strings can be passed in array format or as character pointers. When we know that the function will modify the string itself, we must pass the string as a character array, otherwise, modifying the string from a pointer is not allowed. When strings are only used, we can pass them using pointers or character arrays, and the effect is the same. But in this case passing via character array is good as it will prevent unintentional updates to the string.
The above is the detailed content of C++ program to pass string to function. For more information, please follow other related articles on the PHP Chinese website!