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;
但显然这不正确。我假设最好的方法是以某种方式使用换行符,但我不知道如何去做。我想我可以将数组复制到一个新的临时数组中,该数组会在每个索引中保存原始数组索引中保存的段落的句子,但这似乎让我的问题太复杂了。
我还尝试将字符串数组复制到一个向量中,但这似乎并没有帮助我解决问题。
答案 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。