Maison > Article > développement back-end > Programme C++ pour passer une chaîne à une fonction
Tout langage de programmation qui utilise des fonctions a un code plus simple, plus modulaire et plus facile à modifier lors du débogage. Les fonctions sont une partie très bénéfique du code modulaire. Les fonctions peuvent accepter des paramètres et effectuer certaines opérations sur ceux-ci. Comme d’autres types de données primitifs, nous pouvons également transmettre des types d’objets ou des tableaux comme paramètres. Dans cet article, nous verrons comment transmettre des données de type chaîne comme paramètre de fonction en C++.
C++ prend en charge les objets chaîne plus forts qui sont en fait une classe avec différentes fonctions membres qui leur sont associées. Un objet chaîne passé en argument est similaire au passage de types de données primitifs normaux.
<return type> function_name ( string argument1, string argument2, … ) { // function body }
Dans l'exemple suivant, nous verrons un programme pour vérifier si une chaîne donnée est un palindrome ou non. Il y aura deux fonctions, l'une inversera la chaîne et une autre vérifiera si la chaîne est palindrome ou non. l'algorithme et l'implémentation C++ correspondante.
#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
Étant donné que C++ prend en charge presque tout ce qui est pris en charge par C, nous pouvons également définir des chaînes en utilisant un tableau de caractères comme C. Pour transmettre des chaînes de type C à une fonction, celle-ci doit transmettre un tableau de caractères ou un pointeur de caractères vers l'adresse de base du chaîne. Les syntaxes sont comme ci-dessous −
(Utilisez le pointeur de caractère)
<return type> function_name ( char* <string variable>, … ) { // function body }
(Utiliser un tableau de caractères)
<return type> function_name ( char <string variable>[], … ) { // function body }
Voyons le même exemple de vérification de palindrome avec passage d'un tableau de caractères. Ici, la fonction reverse() modifiera le tableau, nous devons donc passer cette chaîne comme un tableau de caractères, pas le pointeur de caractère et isPalindrome() vérifiera simplement. si la chaîne est la même que la chaîne inversée, elle peut donc prendre un pointeur de caractère ou un tableau de caractères, et l'effet sera le même. L'algorithme est similaire, nous entrons donc directement dans le code.
La traduction chinoise de#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
Dans cet exemple, nous voyons qu'il existe plusieurs étapes pour adapter des chaînes de style C en C++. Pour les chaînes de style C, utilisez la bibliothèque cstring pour la longueur, la comparaison de chaînes et d'autres opérations. Pour convertir une chaîne C++ en chaîne C, vous devez utiliser la fonction c_str(), mais cette fonction renvoie const char*. Cependant, notre fonction n'accepte que les données de type char*. Dans ce cas, nous devons utiliser const_cast
La fonction peut accepter des types de données primitifs ainsi que des tableaux, des types d'objets, etc. Lorsque nous utilisons des chaînes, en C++, ce sont des types d'objets et en C, ce sont des types de tableaux de caractères. Mais comme C++ prend également en charge la syntaxe C, elle est également valable en C++. Passer un objet chaîne est simple, mais passer un tableau de caractères nécessite une attention particulière et le respect de quelques étapes strictes. Les chaînes de style C peuvent être transmises sous forme de tableau ou sous forme de pointeurs de caractères. Quand on sait que la fonction va modifier elle-même la chaîne, il faut passer la chaîne sous forme de tableau de caractères, sinon, la modification de la chaîne à partir d'un pointeur n'est pas autorisée. Lorsque des chaînes sont uniquement utilisées, nous pouvons les transmettre à l'aide de pointeurs ou de tableaux de caractères, et l'effet est le même. Mais dans ce cas, le passage via un tableau de caractères est une bonne chose car cela empêchera les mises à jour involontaires de la chaîne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!