c++测试字符串的最后一个字符

C++ test last character of a string

本文关键字:最后一个 字符 字符串 测试 c++      更新时间:2023-10-16

我想测试var字符串是否以'n'终止,以便从流异步套接字中检测和删除一些不完整的传入变量。似乎下面的代码不能正常工作。为什么?

string var;
char *rest = nullptr;
char *pVar = nullptr;
istringstream iss(sReadBuffer); // Put into a stream            
while (getline(iss, var)) // Default delimiter 'n' or EOF
{                       
    int size = var.size();
    pVar = _strdup(var.c_str()); // Cast string to char * for later use (strstr,...)
    if(var[size] != 'n') // If incomplete variable found (not newline ended)...
    {
        debug("Incomplete variable found : ", pVar, "n");
        rest = pVar;                                
        break;
    }
//... proceed with variable normally if they are complete

getline()放弃换行符。如果要测试EOF,请测试stringstream对象本身。

var[size]访问越界字符串。但是您可以使用std::string::back成员来获取对最后一个元素的引用。

if(var.back() != 'n')

避免潜在的索引错误。上面的代码假设var不是空的。您可以查看std::string::empty()。例如,

if((!var.empty()) && (var.back() != 'n'))

如何在使用getline读取的字符串中找到n是另一回事。