所以我有一个名为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;
用它成功地从一行的开头读到第一个句号“。”但我没有设法把起点放在第一个大写字母上。我想我还没有声明我和字符串启动正确。
答案 0 :(得分: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