如何在一行的末尾添加问号?

时间:2013-05-02 20:58:02

标签: c++ c parsing buffer

我想查看用户是否在缓冲区的末尾添加了?。如果没有,我希望程序自动添加一个。这就是我到目前为止所拥有的。我不知道接下来该做什么。

首先,我检查缓冲区是否为空白 然后,如果最后一项不是?,则将问号自动添加到缓冲区,然后将内容复制到当前数据节点。

if ( strlen(buffer) != 0)
{
   if (buffer[strlen(buffer)-1] != '?')
   {

           //what do i put here to add the ? if theres non?    
   }

strcpy(current->data,buffer);

}

3 个答案:

答案 0 :(得分:7)

从我所看到的,你不会以这种方式修改buffer。如果需要,您只需将?添加到current->data即可。

int len = strlen(buffer);
strcpy(current->data, buffer);
if (len && buffer[len-1] != '?') {
    current->data[len] = '?';
    current->data[len+1] = '\0';
}

如果是一个选项,您应该考虑更改代码以改为使用std::string

std::string buffer = input();
if (!buffer.empty() && buffer.back() != '?') buffer += '?';
std::copy(buffer.begin(), buffer.end(), current->data);
current->data[buffer.size()] = '\0';

如果您没有C ++ 11编译器,请使用*buffer.rbegin()代替buffer.back()

答案 1 :(得分:1)

您需要将字符串与用户使用问号1编写的消息连接起来。为此,您可以使用连接方法。此方法在本文Concatenating strings doesn't work as expected中提供。

答案 2 :(得分:0)

为什么不在连接问号之前创建一个检查最后一个字符是否为问号的函数?

//Create function that returns a bool
bool isQuestionMark(char * buffer)
{  
    //Create pointer to buffer    
    char * pointer = buffer;

    //Go to the null character
    while(*pointer != '\0')
        pointer++;

    //Get to the last character
    pointer--;

    //Check to see if last character is a question mark
    if(*pointer == '?')
        return true;
    else
        return false;
}

然后你想调用那个函数来看看你是否需要连接一个问号。

if(isQuestionMark(buffer) == true)
    strcat(buffer, "?");
else
    //Do nothing