1

所以我有一个名为 Names.txt 的文本文件,它有 20 000 行。行示例如下所示

"niineve","1 Mo.","VT","1 Mo. 10:12"
"nimrod","1 Mo.","VT","1 Mo. 10:8"
"nimrod","1 Mo.","VT","1 Mo. 10:9"
"noa","1 Mo.","VT","1 Mo. 5:29"

仅供参考目前我有一个代码,我可以在其中输入名称并查找它在文件中出现的次数。

现在我需要以某种方式输出 Mo 部分,我在文件中有大量音节,例如“Ilm.”、“Mo.”、“Sj.”、“Sk”。我需要得到一个必要的输出,但我现在不会太具体。

我的问题:有没有办法从第一个大写字母(包括)开始并以第一个句点(不包括)结束的行中获取字符。

因此,如果我在文本文件中的行是

"hiskija","2 Ku.","VT","2 Ku. 20:8" 

那么输出将是 Ku,因为 K 是第一个大写字母,并且 Ku 之后是一个句点。如果不能,您能否建议另一种方法,如何从该位置获得一个音节(2-3 个字符),我想也许我可以从符号 "," 和 . 所以如果线条是

"niineve","1 Mo.","VT","1 Mo. 10:12" 

我会得到 1 Mo 的输出,但我没有使用任何可以做到这一点的命令的经验。

编辑:这就是我目前所拥有的

ifstream file ("Names.txt");

int i;
for (i = 0; i < book.length(); ++i) {
    if ('A' <= book[i] && book[i] <= 'Z') break;
}

string start = book.substr(i);
getline(file, start, '.');
cout << start;

这样它就成功地从行首读取到第一个句点“。” 但我没有设法将起点放在第一个大写字母上。我想我没有声明 i 和 string 正确启动。

4

1 回答 1

1

您可以使用 getline 函数读取最多特定字符的数据

getline(file,str,delimiter);

这会将所有内容写入字符串“str”,直到找到分隔符(在您的情况下为“.”)。

那么你只需要遍历字符串并找到第一个大写字母,比如

int i;
for (i = 0; i < str.length(); ++i) {
    if ('A' <= str[i] && str[i] <= 'Z') break;
} 

变量“i”现在保存起始索引,您现在要做的就是提取适当的替换

str.substr(i) // from 'i' all the way to the end
于 2013-04-07T16:55:22.723 回答