Почему я не могу напечатать инициалы имени?

Я пытаюсь написать код, который печатает инициалы с заданным именем? Я получаю ошибку всякий раз, когда я использую '/0' - чтобы инициализировать i-й символ данной строки. Я использую это, чтобы идентифицировать инициалы 2-го слова? Любые предложения, чтобы обнаружить 2-е слово и распечатать инициал 2-го слова? Кроме того, я пытаюсь написать этот код, чтобы он игнорировал любые дополнительные пробелы:

 #include <stdio.h>
 #include <cs50.h>
 #include <string.h>
 #include <ctype.h>

    int main(void)
    {
          printf ("Enter you Name:");//print name
          string s = get_string(); //get input from user 
          printf("%c", toupper(s[0])); // use placeholder to call the string 

           for (int i=0, n = strlen(s); i < n; i++)
            { 
              if (s[i] == '/0')
               {
                printf("%c", toupper(s[i+1]));  
               }
            }
           printf ("\n");
     }

2 ответа

Я не уверен, что делает ваша функция get_string(), но она делает то, что вы просите.

int main(void)
{
      printf ("Enter you Name:");//print name
      char input[100];
      cin.getline(input, sizeof(input));
      string s(input);
      //get input from user 
      printf("%c", toupper(s[0])); // use placeholder to call the string 

      for (int i=0, n = s.length(); i < n; i++)
        {
          if (isspace(s.at(i)))
           {
            printf("%c", toupper(s[i+1]));  
           }
        }
       printf ("\n");
 }

Попробуйте использовать "" вместо "/0".

if (s[i] == ' ')

или если вы предпочитаете коды ASCII (пробел 0x20 или 32 в качестве десятичного числа):

if (s[i] == 0x20)

Ваш код будет работать, если между именами будет только 1 пробел. Чтобы избежать этого, следует также проверить условие следующего символа. Если это не пробел, то, вероятно, это "буква":

if (s[i] == 0x20 && s[i+1] != 0x20) {...

Обратите внимание, что цикл for должен останавливаться на i ошибкой, если есть конечные пробелы...

Другие вопросы по тегам