2017-09-14 5 views
0

Aide! Je suis en train d'écrire un programme en C pour saisir toutes les initiales - Je ne sais rien de pointeurs permet donc d'essayer de rester loin de ceux - c'est ce que j'ai jusqu'à présent:Programme pour saisir les initiales de la chaîne (nom), Impossible de se débarrasser de TOUS les espaces

#include <stdio.h> 
//CS50 Library for 'get_string() user input' 
#include <cs50.h> 
#include <string.h> 
#include <ctype.h> 

int main(void){ 
    printf("Enter your name: "); 
    //User input for string 
    string s = get_string(); 
    int i = 0; 
    //Determine whether the first chars are space - if not print char 
    if(s[0] != isspace(s[0])){ 
      printf("%c",s[0]); 
     } 
    //loop through each Char - determine char is not space 
    while(s[i] != '\0'){ 
     if(s[i] == ' '){ 
      //if i'th char is space - add one to it thus printing char that comes after space 
      printf("%c", toupper(s[i+1])); 
     } 
     //advance i'th char count 
     i++; 
    } 
    printf("\n"); 
} 

Quand je entrée « John Gerald Smith » le programme revient avec "JGB", mais si je tente d'entrer quelque chose comme: "John Smith Smith" (plusieurs espaces), il semble ne pas supprimer l'un des espaces. Je reçois toujours les initiales pour la sortie, mais je dois m'assurer qu'il n'imprime aucun espace du tout. S'il vous plaît aidez! Ce sont des devoirs, donc je ne m'attends pas à recevoir la réponse, mais si quelqu'un pouvait me donner des informations sur la façon de le faire, je l'apprécierais beaucoup. Merci!

+0

Ne vous contentez pas regarder le caractère actuel, mais aussi si le caractère NEXT n'est pas un espace. Attention à la vérification des limites (ne pas dépasser la fin de la chaîne!) – meisen99

Répondre

0
#include <stdio.h> 
//CS50 Library for 'get_string() user input' 
#include <cs50.h> 
#include <string.h> 
#include <ctype.h> 

int main(void){ 
    printf("Enter your name: "); 
    //User input for string 
    string s = get_string(); 
    int i = 0; 
    //Determine whether the first chars are space - if not print char 
    if(!isspace(s[0])){ 
      printf("%c",s[0]); 
     } 
    i++; 
    //loop through each Char - determine char is not space 
    while(s[i] != '\0'){ 
     if(s[i-1]==' ' && s[i] != ' '){ 
      //if i'th char is space - add one to it thus printing char that comes after space 
      printf("%c", toupper(s[i])); 
     } 
     //advance i'th char count 
     i++; 
    } 
    printf("\n"); 
} 

D'abord, il vérifie la météo caractère précédent est l'espace ou non, si elle est l'espace alors il vérifier si le caractère actuel est l'espace ou non et si elle est pas d'espace imprimer le caractère actuel pas autrement.

Espérons que cela aide.

1

Je l'approcherais différemment de l'original et la réponse par @yajiv en évitant "code de cas spécial" pour le premier caractère de la chaîne.

Je prendrais une course dans la liste et utiliserais un "état" pour savoir quand sortir un caractère.

  • Quand on voit un espace que nous savons que nous voulons sortie l'espace suivant non (nous avons donc mis printNextNonSpace)

  • Quand nous voyons un espace non que nous l'imprimer si printNextNonSpace est réglé (puis nous effaçons printNextNonSpace pour éviter d'imprimer des caractères supplémentaires)

  • printNextNonSpace est initialement défini sur 1, donc nous imprimons le premier caractère de la chaîne s'il ne s'agit pas d'un espace.

Notez que cela gérer un certain nombre d'espaces partout dans la chaîne "Andrew Bill Charlie" -> "ABC", " David Edgar Frank " -> "DEF"

[code supprimé OP à bon escient que voulait des conseils non réponse sur un plateau]

+0

Recommandez-vous d'utiliser une boucle for pour parcourir les tableaux char et appeler une fonction printNextNonSpace à partir de la condition for? –

+0

Non. Vous pouvez toujours utiliser votre boucle while et vous n'avez pas besoin d'une fonction supplémentaire - juste un drapeau pour savoir si vous voulez imprimer le caractère que vous regardez actuellement ou non. – John3136