-1
votes

Différence entre char et chaîne

Une chaîne n'est qu'une gamme de caractères (a un caractère '\ 0' ou null à la fin). Mais lorsque j'utilise la fonction GetLine en C ++, cela me donne une erreur si j'utilise caractère, mais aucune erreur pour la chaîne. Les travaux suivants: xxx

mais quand j'utilise caractère au lieu de chaîne.it ne fonctionne pas xxx

` < / p>


4 commentaires

Vous mélangez des cordes C et C ++. "Une chaîne n'est qu'une gamme de caractères (a un caractère" \ 0 'ou null à la fin) " c'est vrai pour C Strings. std :: string est une chaîne C ++. Ils sont fondamentalement différents.


Pour le sac de compréhension, vous pouvez dire qu'une chaîne est une matrice de caractères avec '\ 0' à la fin, mais ce n'est pas si simple. STD :: String a de nombreuses fonctions définies pour celui-ci qui ne fonctionnera pas pour la matrice de caractères.


std :: string est en fait une enveloppe de classe dynamique pour les chaînes C primitives. std :: getline () attend un std :: string pas char * . Vous voudrez peut-être utiliser fgets (nom, stdin, 50) dans cette situation particulière, mais ce n'est pas requis dans le contexte de C ++ où std :: string < / code> existe. Par conséquent, vous allez presque jamais trouver la nécessité d'avoir à rencontrer char * , const char * , etc. sauf dans certains cas importants où ils sont obligatoires (par exemple, si vous utilisez une bibliothèque C externe C).


Un std :: string est un type de classe qui gère une collection de char s. Un tableau de Char est une collecte brute de Char S qui se trouvent dans un bloc de mémoire contiguë - c'est-à-dire un type complètement différent. std :: getline () a des surcharges pour la lecture à un std :: string mais pas pour lire à un tableau brut de Char . Cependant, les flux d'entrée ont une fonction de membre à lire à un tableau de char (mais pas à un std :: string ) Donc, dans le second cas, utilisez std :: Cin.getline (nom, taille de (nom)) ou (plus grossièrement dans votre cas) std :: cin.getline (nom, 50) .


4 Réponses :


0
votes

Vous mélangez des cordes C et C ++.

"Une chaîne n'est qu'une gamme de caractères (a un caractère '\ 0' ou null à la fin)." c'est vrai pour C Strings. STD :: String Dans votre code est une chaîne C ++. Ils sont fondamentalement différents. Une chaîne C ++ n'est pas un matrice de tableau. C'est un objet de classe std :: string . Vous pouvez copier une chaîne C dans une chaîne C ++ et vous pouvez initialiser une chaîne C ++ avec C chaîne C. Vous pouvez convertir une chaîne C ++ en chaîne Const C avec std :: String :: C_STR () .

std :: getline attend un std :: string comme second paramètre. Vous ne pouvez pas l'utiliser avec C chaîne.


0 commentaires

0
votes

std :: La chaîne est une classe composée de caractères et non un tableau de caractères. Cela signifie que les deux types sont différents. Voir STD :: String Définition: ici

La fonction GetLine a besoin d'une chaîne. Cela ne fonctionnera pas pour un tableau de caractères. Voir Docs: ici


0 commentaires

1
votes

Vous pensez peut-être quelque chose comme CS50.h en C, où string code> est un typlef de char * code>. Ce n'est pas le cas en C ++, où std :: string code> est en fait un type complètement différent.

Il y a une forme de getline () code> que vous pouvez utiliser avec char * code>, bien que ce n'est pas libre une fonction. C'est une fonction de membre de std :: istream code>, quel std :: Cin code> hérite. Voici votre code modifié pour l'utiliser: P>

#include<iostream>
int main()
{
    char name[50];
    std::cout<<"Name: ";
    std::cin.getline(name, sizeof name);
    std::cout<<"Name: "<<name;
    return 0;
}


0 commentaires

0
votes

C'est très simple.

Un caractère est généralement un seul caractère d'ASCII. par exemple A, B, C et autres.

D'autre part, une chaîne est généralement une collection ou une série de places l'une après autre. Exemple "Bonjour", "Salut Bro".


0 commentaires