Я работаю над проблемой, в которой у меня:
пользователь вводит количество имен в списке, а затем вводит имена. Затем мне нужно изменить строки так, чтобы в каждом имени первый символ был заглавным, а остальные - строчными.
Если имена вводятся следующим образом:
2 EliZAbetH paUL
Результат должен быть таким:
Elizabeth Paul
Вот что я пробовал:
#include <iostream>
#include<string>
#include <cctype>
#include <stdio.h>
#include <ctype.h>
using namespace std;
const int FYLKJASTAERD = 100;
int main()
{
int FjoldiOrd = 0;
//get the number of students
cout << "Enter the number of students: ";
cin >> FjoldiOrd;
string Nofn[FYLKJASTAERD];
//get student names
for (int i=0; i<FjoldiOrd; i++)
{
cin >> Nofn[i];
if (Nofn.length()>0)
{
Nofn[0] = std::toupper(Nofn[0]);
for (size_t i = 1; i < Nofn.length(); i++)
{
Nofn[i] = std::tolower(Nofn[i]);
}
}
}
cout << Nofn[i] << endl;
return 0;
}
Программа не компилируется и выдает такую ошибку:
request for member lenght in Nofn which is of non-class type 'std::string[100]
Вопрос:
Не могли бы вы подсказать мне, что я делаю не так?
Примечание:
Я сделал более простую версию, используя только имя ввода, и она отлично работает.
string name;
cout << "Please enter your first name: ";
cin >> name;
if( !name.empty() )
{
name[0] = std::toupper( name[0] );
for( std::size_t i = 1 ; i < name.length() ; ++i )
name[i] = std::tolower( name[i] );
}
cout << name << endl;
return 0;
}
std::toupper
из C должен быть неотрицательным целым числом илиEOF
. Итак, переведите его вunsigned char
. И то же самое дляstd::tolower
. - person Cheers and hth. - Alf   schedule 25.09.2015if (Nofn.length()>0)
должно бытьif (Nofn[i].length()>0)
? - person Galik   schedule 25.09.2015