Tout d'abord, ne critiquez pas la manière dont le programme est écrit, car c'est ce que nous étudions dans mon pays.
Je sais que c'est un mélange de C et C ++ et les choses que j'utilise sont obsolètes, Mais c'est comme ça que les choses sont ici. P>
Donc, je dois faire un programme qui obtient comme une entrée n mots. Ensuite, je dois imprimer les mots qui ont le dernier comme préfixe. P>
E.g. P> Ceci est mon programme. Cela fonctionne comme prévu: p> mais initialement, il ressemblait à ceci: p> et il jette des erreurs: Severity Code Description Project File Line Suppression State
Error (active) E0167 argument of type "char" is incompatible with parameter of type "const char *" ConsoleApplication1 25
Severity Code Description Project File Line Suppression State
Error C2664 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'char' to 'const char *' ConsoleApplication1 25
3 Réponses :
for (int i = 0; i < n - 1; i++) { ok = 1; if (strncmp(a[i], a[n-1], p) != 0) { ok = 0; } if (ok == 1) { cout << a[i] << " "; } }
Merci. Je ne savais même pas que STRNCMP existait.
Dans cette déclaration les deux expressions Le compilateur émet une erreur. P> Vous pouvez simplifier votre premier programme à l'aide de la fonction standard a [i] [j] [j] code> et
A [n-1] [j] code > Demandez au type Char alors que la fonction
STRCMP code> attend deux pointeurs sur les chaînes de type
char * code>. P>
strncmp code>. Par exemple P>
size_t p = strlen(a[n - 1]);
for (int i = 0; i < n - 1; i++)
{
if ( strncmp( a[i], a[n-1], p ) == 0 ) cout << a[i] << " ";
}
Même si votre réponse est un peu meilleure, j'ai choisi l'autre comme le correct parce qu'il était plus rapide. Pouvez-vous élaborer en utilisant "cstring" au lieu de "string.h"? Pour autant que je sache, la cStch doit être évitée (parce que c'est obsolète).
@Johnsmith C'est une exigence de la norme C ++.
@Johnsmith -
std :: code> . Ce n'est pas obsolète et il n'y a aucune raison de l'éviter. Il y avait des gens tôt sur ceux qui pensaient que la toute la bibliothèque C devrait être tolérée jusqu'à ce qu'elle puisse être retirée. Cet effort a rapidement échoué.
La modification la plus simple du code dans la question est de modifier le test de si (STRCMP (A [I] [J], A [N] [J])! = 0) code > Pour
si (a [i] [j]! = A [N-1] [J] [J]) code>. P>
Si vous utilisez des pièces C dans le code C ++, il est toujours C ++.
Qu'entendez-vous par «transformer en ASCII»?
Vous ne devez pas appeler
strcmp code> sur chaque caractère de la chaîne. Il compare déjà les chaînes après tout.
@ user3121023 Je comparais chaque lettre. une première lettre de [i] avec une première lettre de [N-1], et ainsi de suite.
@Gerhardh Eh bien, il semble plus comme C pour moi tbh. La seule chose C ++ que j'utilise est iostream avec Cin / Cout. À l'exception de cela, tout est le style C, c'est ce que je l'ai marqué comme C. Également, je ne savais pas que je ne peux pas utiliser STRCMP pour comparer chaque caractère.
@JOHNSMITH ALORS
STRCMP code> est le mauvais outil pour le travail, il compare les chaînes non des caractères.
@john ouais. Je ne savais pas que je ne peux pas l'utiliser pour comparer des personnages. Merci.
Il suffit de supprimer complètement la boucle
j code> complètement et utilisez
si (STRCMP (A [i], A [N-1])! = 0) code>.
@ DAVIDC.RANKIN - L'exigence ici est de trouver des chaînes pour lesquelles la chaîne finale est un préfixe B>. Ce n'est pas à la recherche de chaînes identiques, donc
STRCMP code> ne fonctionnera pas.
@Petebecker -
strncmp code> alors.