Преобразуйте массив символов в строку с помощью cin.getline (.) - PullRequest
0 голосов
/ 06 мая 2020

привет, ребята, мой вопрос в том, как преобразовать массив символов в строку. вот мой код:

#include<iostream>
using namespace std;

int main()
{
    while (true) {
        char lol[128];
        cout << "you say >> ";
        cin.getline(lol,256);
        cout << lol << endl;;
    }
    return 0;
}

, поэтому я хочу преобразовать lol в строковую переменную, такую ​​как "stringedChar" (если это даже engli sh lol), чтобы я мог делать такие вещи, как:


        string badwords[2] = {"frick","stupid"};
        for (int counter = 0; counter < 2;counter++) {
            if(strigedChar == badwords[counter]) {
             bool isKicked = true;
             cout << "Inappropriate message!\n";
            }
        }

Извините, я просто новичок на C ++, смеется

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

Просто вызовите std::getline() для объекта std::string вместо того, чтобы возиться с массивом char, и используйте std::set<std::string> для badwords, поскольку членство в наборе тестирования тривиально:

#include <iostream>
#include <set>
#include <string>

static std::set<std::string> badwords{
    "frick",
    "stupid"
};

int main() {
    std::string line;

    while (std::getline(std::cin, line)) {
        if (badwords.count(line) != 0) {
            std::cout << "Inappropriate message!\n";
        }
    }

    return 0;
}

Обратите внимание, что это проверяет, равна ли вся строка какому-либо элементу набора, не , что строка содержит какой-либо элемент набора, но ваш код, похоже, пытается сделать первое в любом случае.

0 голосов
/ 07 мая 2020

Во-первых, вы ошиблись в коде. Вы выделяете массив 128 char s, но вы сообщаете cin.getline(), что вы выделили 256 char s. Итак, у вас есть ожидание переполнения буфера.

Тем не менее, std::string имеет конструкторы, которые принимают char[] данные в качестве входных данных, например:

#include <iostream>
using namespace std;

int main()
{
    while (true) {
        char lol[128];
        cout << "you say >> ";
        cin.getline(lol, 128);
        string s(lol, cin.gcount());
        cout << s << endl;;
    }
    return 0;
}

Однако вы действительно должны использовать std::getline() вместо std::string вместо char[]:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    while (true) {
        string lol;
        cout << "you say >> ";
        getline(cin, lol);
        cout << lol << endl;;
    }
    return 0;
}
0 голосов
/ 06 мая 2020

Сделайте что-то вроде этого:

как char lol [128]; в строку вида: std :: string str (lol);

Строка: cin.getline (lol, 256); <--> следует заменить на cin.getline (lol, 128)

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