【发布时间】:2010-11-30 20:26:55
【问题描述】:
我正在寻找一种将以下文本行拆分为数组的方法。
这是一些文字\r\n“这里是另一行”\r\n还有另一行
这样得到的数组是:
这里有一些文字
\r\n
"
这是另一行
"
\r\n
还有一行
注意这里基本上有两个分隔符," 和 \r\n。
我需要在 C++ 中执行此操作,将来可能会有额外的分隔符。
有什么想法吗?
提前致谢。
编辑:不,这不是家庭作业。
这是我目前所拥有的:
const RWCString crLF = "\r\n";
const RWCString doubleQuote = "\"";
RWTValOrderedVector<RWCString> Split(const RWCString &value, const RWCString &specialContent)
{
RWTValOrderedVector<RWCString> result;
unsigned index = 0;
RWCString str = value;
while ( ( index = str.index( specialContent, 0, RWCString::ignoreCase ) ) != RW_NPOS )
{
RWCString line = str(0, index);
result.append(line);
result.append(specialContent);
str = str(index, str.length() - index);
str = str(specialContent.length(), str.length() - specialContent.length());
}
if (str.length() > 0)
{
result.append(str);
}
return result;
}
void replaceSpecialContents(const RWCString &value)
{
RWTValOrderedVector<RWCString> allStrings;
RWTValOrderedVector<RWCString> crLFStrings = Split(value, crLF);
for (unsigned i=0; i<crLFStrings.entries(); i++)
{
RWTValOrderedVector<RWCString> dqStrings = Split(crLFStrings[i], doubleQuote);
if (dqStrings.entries() == 1)
{
allStrings.append(crLFStrings[i]);
}
else
{
for (unsigned j=0; j<dqStrings.entries(); j++)
{
allStrings.append(dqStrings[j]);
}
}
}
}
【问题讨论】:
-
您已经尝试过哪些方法?
-
基本上,您希望将其拆分为令牌(尽管令牌通常不是整行)。为了标记输入,您需要一个词法分析器。
-
小心“\r\n”。在某些平台上,这是行终止序列。因此,如果您以文本模式(默认)打开文件,这两个字符将被转换为单个 '\n' 字符(在某些平台上)。另请注意:相反,“\n”字符在写入文件(以文本模式打开)时会转换为行终止序列。
-
RWTValOrderedVector: 只是想知道,什么是无序向量? -
@ybungalobill -
RWTValVector<T>遗憾的是,它对方法有限制。例如,没有append,因为该类假定向量生命周期的长度恒定。有一个reshape,所以如果你为它工作,你可以做一个追加。