if x>y - 3 points
if x<y - 0 point
if x = y - 1 points
4 Réponses :
unsigned points = 0;
for(int i = 0; i < 10; i++){
int r;
char *itr;
for (itr = match[i]; itr != ':'; itr++);
r = strncmp(match[i], itr + 1, itr - match[i]);
if (!r)
points += 1;
else if (r > 0)
points += 3;
}
Cela ne fonctionne pas si une chaîne est comme "2:13". Cela ne devrait pas donner des points.
Char * Correspondances [10] est une matrimonie de pointeurs de caractères, ou d'une gamme de chaînes. Nous pouvons indiquer n'importe quelle chaîne de la matrice avec des allumettes [index] ou * (correspondant + index), qui se désintègre à un pointeur de caractère (chaîne). Nous pouvons ensuite trouver un caractère spécifique dans celui-ci avec une déréférence avec [] ou avec l'arithmétique du pointeur.
Par exemple, P>
2:3 x: 2 y: 3 0:0 x: 0 y: 0 15:12 x: 15 y: 12 2:13 x: 2 y: 13 1:5 x: 1 y: 5 55:7 x: 55 y: 7 7:2 x: 7 y: 2 17:2 x: 17 y: 2 2:17 x: 2 y: 17 17:18 x: 17 y: 18
Voici toute la solution. Vous pouvez obtenir un pointeur du score de l'équipe Y en trouvant le caractère : code> dans chaque résultat. (Voir comment obtenir str_y code> pointeur).
Je pense que la partie la plus délicate est d'obtenir le score de chaque équipe sans utiliser de fonctions telles que STOI. J'ai écrit ma solution mais je vous recommande d'écrire cela par vous-même (surtout s'il s'agit d'une tâche des devoirs). #include <stdio.h>
int main(void)
{
int point_x = 0;
int point_y = 0;
const char *matches[10] = { "2:3", "0:0", "15:12", "2:13", "1:5", "55:7", "7:2", "17:2", "2:17", "17:18" };
for (int i = 0; i < 10; i++)
{
// This pointer points the first character of each result
const char* match = matches[i];
// Get the pointer of ":" of this result
const char* separator = match;
while( *separator != ':' && *separator != '\0' ) separator++;
// You would need to handle error when ':' is not found but here just assumes all the results contain ":".
// To make it easy to understand prepare two pointers to point each score in a result.
const char* str_x = match;
const char* str_y = separator+1; // next character of the separator
// Convert each string to number. Because we cannot use stoi, tokenize functions
// we have to do it by ourselves.
int score_x = 0;
while( *str_x != ':'){ // until separator
score_x = score_x*10 + (*str_x - '0');
str_x++;
}
int score_y = 0;
while( *str_y != '\0'){ // until NULL
score_y = score_y*10 + (*str_y - '0');
str_y++;
}
// Now compare them and give points
if( score_x == score_y ){
point_x++;
point_y++;
}else if( score_x > score_y ){
point_x+=3;
}else{
point_y+=3;
}
}
printf("point_x=%d point_y=%d\n", point_x, point_y);
return 0;
}
Si nous supprimons toute la complexité inutile et étrange avec le pointeur à pointeur, nous obtenons ce code rapide et lisible: le seul cas où il ferait un peu de sens Pour utiliser Char ** code> est lorsque la quantité de chaînes est inconnue et qu'elle est terminée avec une valeur de sentinelle em> telle que null. C'est une situation moins idéale que de connaître la quantité d'éléments à l'avance et donc un peu plus lentement à exécuter. Exemple: P> #include <stdio.h>
int main(void)
{
char* matchs[10+1] = { "2:3", "0:0", "15:12", "2:13", "1:5",
"55:7", "7:2", "17:2", "2:17", "17:18", NULL };
for(char** ptr=matchs; *ptr != NULL; ptr++)
{
printf("%s ", *ptr);
}
return 0;
}
Rendre spécifique quelle partie que vous ne pouvez pas comprendre. Comprenez-vous comment fonctionne le pointeur? Comprenez-vous comment analyser les personnages? Comprenez-vous comment TOKENIZE String séparé par
: code>?Je ne comprends pas comment écrire un pointeur qui peut indiquer chaque caractère de ce tableau car le score de chaque match a été enregistré comme "x: y". En bref, je veux savoir comment écrire un pointeur qui peut indiquer chaque caractère de la correspondance du tableau [10] lorsqu'il est placé à l'intérieur d'une boucle, de sorte que nous puissions extraire les scores de x et y séparément à l'aide de (match! = ' \ 0 ') {faire quelque chose} suivez pendant (match [i]! =': ') {Faire quelque chose}