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

时间:2015-08-07 05:26:02

标签: c++ string find character

我想测试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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

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

您希望在使用\n读取的字符串中找到getline是另一回事。