Вопрос:
Я попытался использовать getline (cin, myString) и присвоить ему массив символов, но он говорит, что массив должен быть инициализирован инициализатором в скобках
Здесь компилятор определяет размер необходимого массива.
char textConvert[] = "This text will be converted to uppercase.";
Если вы хотите, чтобы пользователь вводил данные, вам нужно выделить массив и указать размер.
char textConvert[50];
Теперь вы можетепрочитайте строку и скопируйте ее в массив:
std::string myString;
std::getline(std::cin , myString);
// Should check that the string is not more than 50 characters.
std::copy(std::begin(myString), std::end(myString), textConvert);
Но на самом деле это вообще не нужно.Просто используйте std::string
и зациклите строку.Лучше всего избегать конструкций C, таких как массивы, и использовать конструкции C ++, которые останавливают ваши ошибки.
Размер строки
Это не очень хорошая идея.
int endChar = sizeof(textConvert);
Этоизмеряет размер массива (не размер строки).Существует также проблема, заключающаяся в том, что массивы очень легко распадутся на указатели.Когда это происходит, sizeof()
даст вам размер указателя (возможно, 4 или 8), а не размер массива.
Чтобы получить размер строки, используйте std::strlen()
(include <cstring>
).
Но на самом деле вы должны использовать std::string
версию C ++ строки, которая выполняет собственное управление памятью и изменяет размеры по мере необходимости.
Магические числа
Предпочитают неиспользуйте магические числа:
if (textConvert[i] >= 97 && textConvert[i] <= 122) {
textConvert[i] = textConvert[i] - 32;
}
Эти магические числа затрудняют чтение кода.Вместо этого вы можете использовать символьные константы.
if (textConvert[i] >= 'a' && textConvert[i] <= 'z') {
textConvert[i] = textConvert[i] - ('a' - 'A');
}
Предпочитать стандартную библиотеку
Но делать это вручную не рекомендуется.Вы должны использовать стандартные библиотечные процедуры.
std::islower() . // Check if a character is lower case.
std::toupper() . // Convert a lowercase character to upper.
// include <cctype>
C ++ Пример
Попробуйте это:
#include <iostream>
#include <string>
#include <cctype>
int main()
{
std::string myString;
while(std::getline(std::cin, myString)) {
std::cout << "User Input: " << myString << "\n";
for(auto& c: myString) {
c = std::toupper(c);
}
std::cout << "Upper Case: " << myString << "\n";
}
}