如何将字符串拆分成行,而不会破坏单词?

时间:2017-03-26 09:35:05

标签: c++ string c++11

让我们说我们有一个字符串,我们希望将字符串分成5个字符长而不分割单个字:

I am going to CUET

现在我们可以通过以下方式分割它:

I am
going
to
CUET

我为此编写代码。首先,我将字符串分解为单词并将其保存到向量中,然后将每个单词检查并检查它是否小于5。如果没有,那么我将字符串添加到ans矢量中。 这是我的代码:

#include<bits/stdc++.h>
using namespace std;

vector<string>split(string txt)
{
    vector<string>result;

    string s="";

    for(int i=0; i<=txt.size();i++)
    {
        if( i<txt.size() and txt[i]!=' ')
            s+=txt[i];
        else
        {
            result.push_back(s);
            s="";
        }
    }
    return result;
}

int main()
{
    string str="I am going to CUET";
    int len=5;
    vector<string>result=split(str);
    vector<string>ans;
    int i=0;
    string s="";
    while(i<result.size())
    {
        if(i<result.size() and s.size()+result[i].size()<=len)
        {
            if(s=="") s+=result[i];
            else s+=" ",s+=result[i];
            i++;
        }
        else
        {
            ans.push_back(s);
            s="";
        }
    }
    if(s!="") ans.push_back(s);
    for(int i=0; i<ans.size();i++) cout<<ans[i]<<endl;
}

有没有比我更好的解决方案或任何更好的解决方案而不先破坏这个词?

编辑:这是我的解决方案,而不是先破坏这个词:http://ideone.com/IusYhE

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的“&lt; = 5长”支票,但这是我的观点:

#include <iostream>
#include <vector>

void main()
{
    std::string szSentence = "I am going to CUET";
    std::vector<std::string> vWords;

    while(szSentence.length() > 0)
    {
        if (szSentence.substr(0, szSentence.find(" ")).length() >= 5)
            vWords.push_back(szSentence.substr(0, szSentence.find(" ")));

        if (szSentence.find(" ") != std::string::npos)
            szSentence = szSentence.substr(szSentence.find(" ")+1);
        else
            szSentence = "";
    }   
}