C++ 用户将字符串输入字符串向量并验证它

C++ 用户将字符串输入字符串向量并验证它,c++,C++,因此,我正在创建一个社交媒体功能程序,并试图通过用户输入将字符串存储到字符串向量中,就像标签一样。但是,在将它们存储到向量中之前,必须通过在字符串之前使用hashtag符号来验证它们。如果有效,标记将存储到向量中,但如果无效,则应重复用户输入提示,直到其有效 Post.cpp #include "pch.h" //Regex std::string posterRegex = "[A-Za-z0-9]{8,}"; std::string messageRegex = "[A-Za-z0-9]{

因此,我正在创建一个社交媒体功能程序,并试图通过用户输入将字符串存储到字符串向量中,就像标签一样。但是,在将它们存储到向量中之前,必须通过在字符串之前使用hashtag符号来验证它们。如果有效,标记将存储到向量中,但如果无效,则应重复用户输入提示,直到其有效

Post.cpp

#include "pch.h"

//Regex
std::string posterRegex = "[A-Za-z0-9]{8,}";
std::string messageRegex = "[A-Za-z0-9]{1,}";

//Validates data against a user-defined string
bool validatePost(std::string regexStr, std::string data)
{
    return std::regex_match(data, std::regex(regexStr));
}

bool validateVector(const std::vector<std::string> &in)
{
    return std::none_of(std::begin(in), std::end(in), [](std::string 
    const &s)
    {
        return s.find("#") == std::string::npos;
    });
}

Post::Post()
{
}

Post::Post(std::string poster, std::string message, 
std::vector<std::string> tags, std::vector<User*> taggedUsers)
{
    setPoster(poster);
    setMessage(message);
    setTags(tags);
    setTaggedUsers(taggedUsers);
}


Post::~Post()
{
}

void Post::setPoster(std::string poster)
{
    for (;;)
    {
        bool bValid = validatePost(posterRegex, poster);
        if (bValid)
        {
            this->poster = poster;
            break;
        }
        else
        {
            std::cout << "Please enter a valid name!\n";
            std::cout << std::endl;
            std::cout << "Poster: ";
            std::cin.clear();
            std::cin.ignore(512, '\n');
            std::cin >> poster;
        }
    }
}

void Post::setMessage(std::string message)
{
    for (;;)
    {
        bool bValid = validatePost(messageRegex, message);
        if (bValid)
        {
            this->message = message;
            break;
        }
        else
        {
            std::cout << "Please enter a valid message!\n";
            std::cout << std::endl;
            std::cout << "Message: ";
            std::cin.clear();
            std::cin.ignore(512, '\n');
            std::cin >> message;
        }
    }
}

void Post::setTags(std::vector<std::string> tags)
{
    for (;;)
    {
                int i = 0;
        bool bValid = validateVector(tags);
        if (bValid)
        {
            this->tags = tags;
            break;
        }
        else
        {
            std::cout << "Please enter a valid tag(s)!\n";
            std::cout << std::endl;
            std::cout << "Tag(s): ";
            std::cin.clear();
            std::cin.ignore(512, '\n');
            std::cin >> tags[i];
        }
    }
}

std::ostream & operator<<(std::ostream& osObject, const Post& coObject)
{
    osObject << coObject.poster << " - " << coObject.message;
    return osObject;
}
#包括“pch.h”
//正则表达式
std::string posterRegex=“[A-Za-z0-9]{8,}”;
std::string messageRegex=“[A-Za-z0-9]{1,}”;
//根据用户定义的字符串验证数据
bool validatePost(std::string regexStr,std::string数据)
{
返回std::regex_匹配(数据,std::regex(regexStr));
}
布尔validateVector(常量标准::向量和输入)
{
返回std::none_of(std::begin(in),std::end(in),[](std::string
康斯特(s&s)
{
返回s.find(“#”)==std::string::npos;
});
}
Post::Post()
{
}
Post::Post(std::string海报、std::string消息、,
std::vector标记,std::vector标记
{
海报(海报),;
设置消息(消息);
设置标签(标签);
设置taggedUsers(taggedUsers);
}
Post::~Post()
{
}
void Post::setPoster(std::string poster)
{
对于(;;)
{
bool bValid=validatePost(posterRegex,海报);
if(bValid)
{
这个->海报=海报;
打破
}
其他的
{
std::cout message=消息;
打破
}
其他的
{
std::cout tags=标签;
打破
}
其他的
{

std::cout您只犯了一个小的逻辑错误

正如user4581301在其评论中所述:

当你定义一个向量时,它最初有0个元素。这意味着,甚至不是元素0。所以,在

std::vector<std::string> tags;

当然还有其他的可能性。但这很容易理解。

std::cin>>标记[i];
如果没有
标记[i]
?例如,
标记
是空的?有时,当你必须对付这样的错误时,它们会走遍你的全身。当我到达标记用户输入提示符时,程序崩溃了——程序实际上并没有崩溃。你收到了一个暂停程序的断言——崩溃意味着程序只是因为错误而突然停止工作内存冲突或类似错误。--并给我一个调试断言失败的错误,说“表达式:向量下标超出范围”--好的,那么错误消息中的内容不被理解?我似乎很清楚问题是什么。
std::vector<std::string> tags;
 std::vector<std::string> tags;
    std::cout << "Tags: ";
    std::string strTag;
    if (std::cin >> strTag)
        tags.push_back(strTag);
    p.setTags(tags);
    std::cout << p.getTags().at(i) << std::endl;
    std::cout << std::endl;
    i++;