1

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

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

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

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

strcpy(current->data,buffer);

}
4

2 回答 2

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().

于 2013-05-02T21:03:49.827 回答
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
于 2013-05-02T21:36:21.843 回答