Преобразование строки предложения в строковый массив слов в Java

Лямбда повышения делает это легким.

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/if.hpp>

std::for_each( v.begin(), v.end(), 
               if_( MyPred() )[ std::mem_fun(&MyType::myfunc) ] 
             );

Вы могли даже покончить с определением MyPred (), если это просто. Это - то, где лямбда действительно сияет. Например, если MyPred имел в виду, "является делимым 2":

std::for_each( v.begin(), v.end(), 
               if_( _1 % 2 == 0 )[ std::mem_fun( &MyType::myfunc ) ]
             );

<час> Обновление: Выполнение этого с C++ 0x синтаксис лямбды также очень хорошо (продолжать предикат как по модулю 2):
std::for_each( v.begin(), v.end(),
               [](MyType& mt ) mutable
               {
                 if( mt % 2 == 0)
                 { 
                   mt.myfunc(); 
                 }
               } );

На первый взгляд это похоже на шаг назад от повышения:: синтаксис лямбды, однако, это лучше, потому что более сложная логика функтора тривиальна для реализации с C++ 0x синтаксиса... где что-либо очень сложное в повышении:: лямбда становится хитрой быстро. Бета 2 Microsoft Visual Studio 2010 года в настоящее время реализует эту функциональность.

42
задан AnimatedRNG 12 January 2011 в 22:44
поделиться

1 ответ

Вот решение в простом и простом коде C++ без необычной функции, используйте DMA, чтобы выделить динамический массив строк и поместить данные в массив, пока Вы не находите открытое пространство. отошлите код ниже с комментариями. Я надеюсь, что это помогает.

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

int main()
{

string data="hello there how are you"; // a_size=5, char count =23
//getline(cin,data); 
int count=0; // initialize a count to count total number of spaces in string.
int len=data.length();
for (int i = 0; i < (int)data.length(); ++i)
{
    if(data[i]==' ')
    {
        ++count;
    }
}
//declare a string array +1 greater than the size 
// num of space in string.
string* str = new string[count+1];

int i, start=0;
for (int index=0; index<count+1; ++index) // index array to increment index of string array and feed data.
{   string temp="";
    for ( i = start; i <len; ++i)
    {   
        if(data[i]!=' ') //increment temp stored word till you find a space.
        {
            temp=temp+data[i];
        }else{
            start=i+1; // increment i counter to next to the space
            break;
        }
    }str[index]=temp;
}


//print data 
for (int i = 0; i < count+1; ++i)
{
    cout<<str[i]<<" ";
}

    return 0;
}
0
ответ дан 26 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: