如何在C ++中的特定单词之前删除字符串中的所有内容?

时间:2014-07-11 14:49:50

标签: c++ string trim erase

查看最终解决方案

这是针对学校的,所以我要求提示,如果可能的话,请求明确的答案。

我需要用“我的名字当前社区学院”这个短语输出“当前社区学院” 我已经有一个循环来利用现有的社区学院。

这基本上是我到目前为止所做的:

    #include "stdafx.h"
    #include <iostream>
    #include <sstream>
    #include <string>

    using namespace std;

    int main()
    {
        string phrase = "My Name current community college";

        cout << phrase << endl << endl;

        for (int i = 0; i < phrase.length(); i++)
        {
            if (phrase[i] == ' ')
            {
                phrase[i + 1] = toupper(phrase[i + 1]);
            }
        }
    return 0;
    }

我尝试过使用str.find和str.erase,但这些似乎有限,因为它们只能搜索invididual字符。有没有办法可以搜索“当前”(这将是我社区学院的名称),并在字符串中出现该单词之前删除所有内容?

更新:感谢Sam,我能完成任务,这就是我现在所拥有的:

#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string phrase = "My Name current community college";

    cout << phrase << endl << endl;

    for (int i = 0; i < phrase.length(); i++)
    {
        if (phrase[i] == ' ')
        {
            phrase[i + 1] = toupper(phrase[i + 1]);
        }
    }

    size_t pos = phrase.find("Current");
    string output = phrase.substr(pos);

    cout << output << endl << endl;
    system("PAUSE");
    return 0;

}

虽然我很痴迷,只是得到一个A并没有达到我的目标。是否有办法完成此任务而无需创建新字符串,例如,保留我的单个字符串但删除“当前”之前的所有内容。

最终更新

我明白了,我根本不需要子串。您可以使用str.find()str.erase()结合使用size_t pos删除所有内容直到找到的单词:

#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string phrase = "My Name current community college";

    cout << phrase << endl << endl;

    for (int i = 0; i < phrase.length(); i++)
    {
        if (phrase[i] == ' ')
        {
            phrase[i + 1] = toupper(phrase[i + 1]);
        }
    }

    size_t pos = phrase.find("Current"); //find location of word
    phrase.erase(0,pos); //delete everything prior to location found

    cout << phrase << endl << endl;
    system("PAUSE");
    return 0;

}

您也可以替换

size_t pos = phrase.find("Current");
phrase.erase(0,pos);

只有phrase = phrase.substr(phrase.find("Current"));并且也有效。

2 个答案:

答案 0 :(得分:1)

您可以使用find查找要开始的索引,您可以使用substr选择要返回的部分。

size_t position = str.find("Current");   

string newString = phrase.substr(position);     // get from position to the end

http://www.cplusplus.com/reference/string/string/substr/

答案 1 :(得分:0)

您可以运行for循环来查找前几个字母以查找Current。然后在找到它的索引处,您可以从该索引中获取子字符串。请参阅以下代码:

for (int i = 0; i < phrase.length(); i++){ if (phrase[i] == 'C' && phrase[i + 1] == 'u'){ phrase = phrase.substr(8); } }

更理想的情况是,您可能希望使用phrase.find(“Current”),因为它可以省去for循环的麻烦。