输出数组

时间:2017-03-02 16:44:17

标签: c++ arrays string

C ++新手在这里,我不确定我的标题是否描述了我想要做的完美,但基本上我正在尝试为该数组的某个索引输出一行字符串数组。

例如:假设myArray [2]是字符串数组的第3个索引,它包含整个段落,每个句子用换行符分隔。

contents of myArray[2]: "This is just an example. 
                         This is the 2nd sentence in the paragraph.
                         This is the 3rd sentence in the paragraph."

我想只输出字符串数组的第3个索引中保存的内容的第一个句子。

Desired output: This is just an example.

到目前为止,我只能输出整个段落而不是一个句子,使用基本的:

cout << myArray[2] << endl;

但显然这不正确。我假设最好的方法是以某种方式使用换行符,但我不知道如何去做。我想我可以将数组复制到一个新的临时数组中,该数组会在每个索引中保存原始数组索引中保存的段落的句子,但这似乎让我的问题太复杂了。

我还尝试将字符串数组复制到一个向量中,但这似乎并没有帮助我解决问题。

2 个答案:

答案 0 :(得分:2)

你可以沿着这些方向做点什么

size_t end1stSentencePos = myArray[2].find('\n');
std::string firstSentence = end1stSentencePos != std::string::npos?
    myArray[2].substr(0,end1stSentencePos) :
    myArray[2];
cout << firstSentence << endl;

以下是std::string::find()std::string::substr()的参考文档。

答案 1 :(得分:1)

以下是您的问题的一般解决方案。

std::string findSentence(
    unsigned const stringIndex, 
    unsigned const sentenceIndex, 
    std::vector<std::string> const& stringArray, 
    char const delimiter = '\n')
{
    auto result = std::string{ "" };

    // If the string index is valid
    if(stringIndex < stringArray.size())
    {
        auto index    = unsigned{ 0 };
        auto posStart = std::string::size_type{ 0 };
        auto posEnd   = stringArray[stringIndex].find(delimiter);

        // Attempt to find the specified sentence
        while((posEnd != std::string::npos) && (index < sentenceIndex))
        {
            posStart = posEnd + 1;
            posEnd = stringArray[stringIndex].find(delimiter, posStart);
            index++;
        }

        // If the sentence was found, retrieve the substring.
        if(index == sentenceIndex)
        {
            result = stringArray[stringIndex].substr(posStart, (posEnd - posStart));
        }
    }

    return result;
}

其中,

  • stringIndex是要搜索的字符串的索引。
  • sentenceIndex是要检索的句子的索引。
  • stringArray是您的数组(我使用了vector),其中包含所有字符串。
  • delimiter是指定句子结尾的字符(默认为\n)。

安全的是,如果指定了无效的字符串或句子索引,则返回空字符串。

查看完整示例here