Заглавные буквы в C ++ - PullRequest
       15

Заглавные буквы в C ++

0 голосов
/ 09 апреля 2019

У меня есть задание, в котором пользователь вводит имя студента в формате (фамилия, имя).Можете ли вы помочь мне выяснить, как использовать заглавные буквы для имени и фамилии?

Я использовал это, чтобы превратить вводимые пользователем данные в массив, чтобы можно было использовать заглавные буквы, но когда я это сделал, у меня возникли проблемы с тем, чтобы он работал вне цикла for.

for (int x = 0; x < fName.length(); x++) 
{ 
    fName[x] = tolower(fName[x]); 
} 
fName[0] = toupper(fName[0]);

1 Ответ

1 голос
/ 09 апреля 2019

Я использовал ваш код и просто добавил несколько разборов вокруг него. Вы действительно очень близки. Дайте мне знать, если у вас есть вопросы по поводу кода.

Я не могу с собой поделать. Для пользовательского ввода я всегда использую getline (), за которым следует строковый поток, чтобы разобрать слова из строки. Я считаю, что это позволяет избежать многих крайних случаев, которые приводят меня в зыбучие пески.

Когда getline () получает ввод, он возвращает true, если у него нет проблем. Если пользователь введет Ctrl-d, он вернет false. Ctrl-D - это, по сути, код EOF (конец файла), который хорошо работает в этом случае (если вы не пытаетесь ввести Ctrl-d изнутри вашего отладчика. Моему это не нравится.

Обратите внимание, что вместо массива я использую std :: string. std :: string можно рассматривать как массив для подписки, но он хорошо печатается и имеет другие функции, которые делают его более удобным для обработки строк символов.

#include <iostream>
#include <string> // Allow you to use strings
#include <sstream>

int main(){

  std::string input_line;
  std::string fName;
  std::string lName;

  std::cout << "Please enter students as  <lastname>, <firstname>\n"
               "Press ctrl-D to exit\n";

  while(std::getline(std::cin, input_line)){
    std::istringstream ss(input_line);

    ss >> lName;
    // remove trailing comma.  We could leave it in and all would work, but
    // it just feels better to remove the comma and then add it back in
    // on the output.
    if(lName[lName.size() - 1] == ',')
      lName = lName.substr(0, lName.size() - 1); // Substring without the comma

    ss >> fName;

    for (int x = 0; x < fName.length(); x++)  // could start at x=1, but this works.
    {
      fName[x] = tolower(fName[x]);  // make all chars lower case
    }
    fName[0] = toupper(fName[0]);

    for (int x = 0; x < lName.length(); x++)
    {
      lName[x] = tolower(lName[x]);
    }
    lName[0] = toupper(lName[0]);

    std::cout << "Student: " << lName << ", " << fName << std::endl;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...