【问题标题】:C++ Clear stringC++ 清除字符串
【发布时间】:2015-04-07 12:15:38
【问题描述】:

嘿,伙计们,我创建了一个游戏,在代码中它有while(true),并且每次输入一个新字符串,问题是如果我第一次写abc,然后在第二次循环abcd,然后abc它保存最后一个d, 我试过str.clear(),我试着把\0放进去,我试着把str = "";放进去,我什么都试过了,还是一样。

以下是部分代码:

    std::string whoplayed;
int res = getPlayersNames();
if(res == -1)
    return;
std::cout << "ok " << splayername << " please start: (Starting from south) S->N->S->N...." << std::endl;
std::string temp = "";
std::string playername = "";
while(true)
{
std::getline(std::cin,temp);
for(int i=0;i<(signed)temp.size();i++)
    {
        if(temp[i] != ':')
        {
            playername[i] = temp[i];
        }
        else break;
    }

    char c;
    for(int i=0;i<(signed)temp.size() ; i++)
    {
        if(temp[i] == ':' && temp[i+1] == ' ')
        {
            c = temp[i+2];
            break;
        }
        else
        {
            continue;
        }
    }

这是代码的一部分..我不能全部发布..当我在第三个循环中使用输入 abc、abcd、abc 打印 playername(确保格式正确,我不需要这样)它保存最后一个 d

【问题讨论】:

  • 写临时定义。
  • 请包含一个简短的、独立的、可编译的示例。您提供的代码并未向我们展示问题所在。
  • 已更新,这是包含问题的部分代码
  • std::string 是一个智能的托管对象。你不应该像那样把手指伸进它的内脏。如果您尝试使用某种冒号分隔符解析字符串,请尝试 find、substr 等。
  • playername 为空。对它的索引 (playername[i]) 不会扩展它,而是未定义。

标签: c++ string fflush


【解决方案1】:

要清除 std::string 使用

std::string sStr;
sStr.clear();

要将字符串 temp 中的所有字符复制到字符串 playername,您可以结合使用 string::find_first_of(...) http://www.cplusplus.com/reference/string/string/find_first_of/ 和 std::copy http://www.cplusplus.com/reference/algorithm/copy/

【讨论】:

  • 将临时变量放入 while 循环的事情
  • 在很多地方都试过了,首先是在循环开始后,最后在我使用玩家名@Post-2:你的意思是在while中初始化临时,我想我试过了
  • 正如其他 cmets 中已经提到的,尽量不要复制字符手册,而是使用特定的 std::functions
【解决方案2】:

这对我有用。

string test;
test = "hello";

cout << test << endl;

test = "";
test = "abc";

cout << test << endl;

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2014-03-07
    • 2011-11-07
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多