Разница между символом и строкой - PullRequest
0 голосов
/ 19 июня 2020

Строка - это просто массив символов (имеет в конце символ '\ 0' или нулевой символ). Но когда я использую функцию getline в С ++, это дает мне ошибку, если я использую char, но не ошибку для строки. Работает следующее:

#include<iostream>
int main()
{
    std::string name;
    std::cout<<"Name: ";
    getline(std::cin,name);
    std::cout<<"Name: "<<name;
    return 0;
}

Но когда я использую char вместо строки, это не работает

#include<iostream>
int main()
{
    char name[50];
    std::cout<<"Name: ";
    getline(std::cin,name);
    std::cout<<"Name: "<<name;
    return 0;
}

`

Ответы [ 4 ]

1 голос
/ 19 июня 2020

Возможно, вы думаете о чем-то вроде cs50.h в C, где string - это typedef char*. Это не относится к C ++, где std::string на самом деле совершенно другой тип.

Существует форма getline(), которую вы можете использовать с char*, но не бесплатная функция. Это функция-член std::istream, которую наследует std::cin. Вот ваш код, измененный для его использования:

#include<iostream>
int main()
{
    char name[50];
    std::cout<<"Name: ";
    std::cin.getline(name, sizeof name);
    std::cout<<"Name: "<<name;
    return 0;
}
0 голосов
/ 22 июня 2020

Это очень просто.

char обычно представляет собой отдельный символ из ASCII. например, a, b, c и др.

С другой стороны, String обычно представляет собой набор или ряд, помещаемых один за другим. пример «привет», «привет, братан».

0 голосов
/ 19 июня 2020

std :: string - это класс, состоящий из символов, а не массив символов. Значит, оба типа разные. См. Определение std :: string: здесь

функции getline требуется строка. Это не сработает для массива символов. См. Документы: здесь

0 голосов
/ 19 июня 2020

Вы смешиваете C строки и строки C ++.

«Строка - это просто массив символов (в конце есть '\ 0' или нулевой символ). Это верно для C строк. std::string в вашем коде - это строка C ++. Они принципиально разные. Строка C ++ не является массивом символов. Это объект класса std::string. Вы можете скопировать строку C в строку C ++ и инициализировать строку C ++ с помощью строки C. Вы можете преобразовать строку C ++ в строку const C с помощью std::string::c_str().

std::getline ожидает std::string в качестве второго параметра. Вы не можете использовать его со строкой C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...