Что-то как КОНЕЦ печати <<КОНЕЦ; в C++?

Необходимо изучить модуль SpellChecker в contrib dir. Это - порт lucene's Java модуль SpellChecker , таким образом, документация должна быть полезной.

(От javadocs:)

Использование В качестве примера:

  import org.apache.lucene.search.spell.SpellChecker;

  SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
  // To index a field of a user index:
  spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
  // To index a file containing words:
  spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
  String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);

11
задан Lightness Races with Monica 29 April 2019 в 11:02
поделиться

7 ответов

This answer is now out of date for modern C++ - see sbi's answer for the modern way.

This is the best you can do:

std::cout <<
    "This is a\n"
    "multiline\n"
    "string.\n";

Not as convenient as a proper heredoc, but not terrible.

11
ответ дан 3 December 2019 в 00:56
поделиться

C++11 has raw string literals:

// this doesn't have '\n', but '\\' and 'n'
R"(yada"yadayada\n)" 

And if you need those parens, you can do that, too, using whatever you want for an end token:

// the following will be "(yada)(yada)(yada)"
R"END((yada)(yada)(yada))END" 

it also works with embedded new lines:

// the following will be "\n(yada)\n(yada)\n(yada)\n"
R"END(
(yada)
(yada)
(yada)
)END" 
28
ответ дан 3 December 2019 в 00:56
поделиться

In C++, it's not usually considered code style to put large amounts of data into source code so there isn't a fancy language way to do it.

It is usually more flexible to put the text into an external file (such as a text file), then it isn't bound into the compiled executable.

If you do want the text to be bound into the executable then (depending on your platform) you can often use some form of resource support, or an assembler with an 'incbin' style directive to give name to a data area with the text that you want.

Alternatively, you can use an external utility (such as xxd -i) to compiler a named C style array from a given input file. The generated file can then be compiled with the rest of the source code.

8
ответ дан 3 December 2019 в 00:56
поделиться

Вы можете сделать так:

std::cout << "First line\n"
"second line\n"
"third line\n" ;

И это лучшее, что вы можете сделать с C ++.

1
ответ дан 3 December 2019 в 00:56
поделиться

There is not such thing as a HEREDOC in C++.

You can do

cout << 
"yadayadayada"
"yadayadayada"
<< endl;

That is the best you can get. But you still has to escape special chars like \,",'.

The way would it be to include the text as an ressource into the executable or load it from an external file.

0
ответ дан 3 December 2019 в 00:56
поделиться

Косая черта в конце строки означает, что следующая строка является продолжением строки. Это приводит вас к альтернативному синтаксису, который вы можете или не можете предпочесть другим предложениям:

std::cout << "\
This is a\n\
multiline\n\
string.\
";

Преимущества: вам не нужно заключать каждую строку в кавычки; при импорте текста из какого-либо другого источника вам нужно редактировать только один конец каждой строки, а не оба конца (больше для макросов); и вы можете точно увидеть, как будет выглядеть результирующая строка, включая начальные пробелы.

Недостатки: вам все равно нужно явно включать \ n для символов новой строки, и мне не нравится терять возможность красиво и красиво отступать в моем коде. Синтаксис HEREDOC также страдает от этой особенности, так что, возможно, это вас не беспокоит.

Лично мне этот синтаксис не нравится.

Это приводит вас к альтернативному синтаксису, который вы можете или не можете предпочесть другим предложениям:

std::cout << "\
This is a\n\
multiline\n\
string.\
";

Преимущества: вам не нужно заключать каждую строку в кавычки; при импорте текста из какого-либо другого источника вам нужно редактировать только один конец каждой строки, а не оба конца (больше для макросов); и вы можете точно увидеть, как будет выглядеть результирующая строка, включая начальные пробелы.

Недостатки: вам все равно придется явно включать \ n для символов новой строки, и мне не нравится терять возможность красиво и красиво отступать в моем коде. Синтаксис HEREDOC также страдает от этой особенности, так что, возможно, это вас не беспокоит.

Лично мне этот синтаксис не нравится.

Это приводит вас к альтернативному синтаксису, который вы можете или не можете предпочесть другим предложениям:

std::cout << "\
This is a\n\
multiline\n\
string.\
";

Преимущества: вам не нужно заключать каждую строку в кавычки; при импорте текста из какого-либо другого источника вам нужно редактировать только один конец каждой строки, а не оба конца (больше для макросов); и вы можете точно увидеть, как будет выглядеть результирующая строка, включая начальные пробелы.

Недостатки: вам все равно придется явно включать \ n для символов новой строки, и мне не нравится терять возможность красиво и красиво отступать в моем коде. Синтаксис HEREDOC также страдает от этой особенности, так что, возможно, это вас не беспокоит.

Лично мне этот синтаксис не нравится.

при импорте текста из какого-либо другого источника вам нужно редактировать только один конец каждой строки, а не оба конца (больше для макросов); и вы можете точно увидеть, как будет выглядеть результирующая строка, включая начальные пробелы.

Недостатки: вам все равно придется явно включать \ n для символов новой строки, и мне не нравится терять возможность красиво и красиво отступать в моем коде. Синтаксис HEREDOC также страдает от этой особенности, так что, возможно, это вас не беспокоит.

Лично мне этот синтаксис не нравится.

при импорте текста из какого-либо другого источника вам нужно редактировать только один конец каждой строки, а не оба конца (больше для макросов); и вы можете точно увидеть, как будет выглядеть результирующая строка, включая начальные пробелы.

Недостатки: вам все равно придется явно включать \ n для символов новой строки, и мне не нравится терять возможность красиво и красиво отступать в моем коде. Синтаксис HEREDOC также страдает от этой особенности, так что, возможно, это вас не беспокоит.

Лично мне этот синтаксис не нравится.

0
ответ дан 3 December 2019 в 00:56
поделиться

Если я вас правильно понял, я думаю, вам нужно это:

#include <iostream>
...
std::cout << std::endl << "yadayadayada" << std::endl;
-1
ответ дан 3 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

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