пример того, что я пытаюсь сделать:получить первую букву каждого слова в строке с помощью C++
String = "This Is My Sentence"
Я ищу, чтобы получить это в результате: «TIMS», который принимает только первую букву каждого слова.
Я борюсь с C++.
пример того, что я пытаюсь сделать:получить первую букву каждого слова в строке с помощью C++
String = "This Is My Sentence"
Я ищу, чтобы получить это в результате: «TIMS», который принимает только первую букву каждого слова.
Я борюсь с C++.
cout<<myString[0];
for(int i=0;i<(myString.size-1);i++)
{ if(myString[i]==" ")
{
cout<< myString[i+1];
{
}
Я не проверял, собирается ли он таким образом, но вы можете получить представление об этом возможном простом решении. Он будет работать только со строками, подобными вашему примеру. Вы должны взглянуть на метод Split, как и другие, которые уже предложены.
Мне не нужно проверять ваше решение, чтобы сообщить вам, что он не будет работать. Извините за зверское честность – MarsOne
Не могли бы вы рассказать мне, где моя идея неправильная? Только проблема Я вижу, если строка имеет несколько пробелов в строке, но она должна работать в данном примере. –
Это не будет работать для первой буквы. Не нужно объяснять дальше. – MarsOne
Попробуйте использовать std::string
и его функцию find
.
Посмотрите Boost Tokenizer - код должен выглядеть как-то так (не тестировалось):
std::string firstLetters(const std::string& str)
{
std::string result="";
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(" ");
tokenizer tokens(str, sep);
for (tokenizer::iterator tok_iter = tokens.begin();
tok_iter != tokens.end(); ++tok_iter)
{
if (tok_iter->size>0)
{
result+=(*tok_iter)[0];
}
}
return result;
}
В качестве альтернативы, вы можете также использовать Boost String Algorithms (опять непроверенные)
std::string firstLetters(std::string& str)
{
std::string result="";
std::vector<std::string> splitvec;
boost::split(splitvec, str, boost::is_any_of(" "), boost::token_compress_on);
//C++11: for (std::string &s : splitvec)
BOOST_FOREACH(std::string &s, splitvec)
{
if (s.size()>0)
{
result+=s[0];
}
}
return result;
}
Для полноты следует упомянуть функцию strtok, но это больше, чем C C++ ;-)
* Jost
Мне нравится Boost, на самом деле. Но в этом случае я бы назвал overkill – nijansen
@nijansen только немного, -) ... Да, вы правы, но представьте себе, что в следующий раз потребуется решение для нескольких разделителей, и я не хочу видеть вызов функция 'find' для каждого разделителя (также думайте о нескольких символах пробела). Это просто более мощный подход - вот почему я разместил его. – Jost
Dont видит C++ кода. – MarsOne
http://stackoverflow.com/a/237280/1056003 Этот ответ делает большую часть работы для вас уже – nijansen
Сам вопрос не так уж плох. Если бы вы только потрудились опубликовать некоторые из ваших кодов, у вас были бы upvotes – MarsOne