我编写了以下代码,以在作为“ GCTATAATAGCCATA”的字符串读取的文本中找到“ ATA”的编号。返回的计数应为3,但返回0。当我在调试器中签入时,最初会创建文本字符串。但是,将空字符串传递给函数patternCount时。我是否将文件内容正确读入字符串文本?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void patternCount(string text, string pattern);
int main()
{
string text;
fstream file_("test.txt");
if(file_.is_open())
{
while(getline(file_,text))
{
cout << text << '\n';
}
file_.close();
}
cout << "Enter a string ";
string pattern;
getline(cin, pattern);
patternCount(text, pattern);
return 0;
}
void patternCount(string text, string pattern)
{
int count = 0;
size_t nPos = text.find(pattern, 0);
while (nPos != string::npos)
{
nPos = text.find(pattern, nPos + 1);
++count;
}
cout << "There are " << count <<" " << pattern << " in your text.\n";
}
答案 0 :(得分:0)
因此,如果我理解正确,则不确定您是否从文件test.txt中正确读取了内容。如果您想阅读所有内容,请尝试以下方法:
ifstream file_("test.txt");
string s,text;
file_>>s;
text=s;
while(file_>>s)
{
text=text+" "+s;
}
这可能应该起作用。请注意,从文件名>>字符串之类的文件读取仅读取到第一个空格。这就是为什么我要使用while。您还可以使用getline()来读取带有空格的整个文本。另请注意,您应该包括fstream。打印出文字也应该会有所帮助。
答案 1 :(得分:0)
#include<stdio.h>
int main()
{
int l, i = 0, j;
float a[100][100];
float *p;
FILE *fp;
fp = fopen("fc.txt", "r");
fscanf(fp, "%d", &l);
fclose(fp);
fp = fopen("Au.txt", "r");
for (i = 0; i <= l; i++)
{
for (j = 0; j <= 2; j++)
{
fscanf(fp, "%f", &a[i][j]);
if (i == l)
{
p = &a[i][j];
p++;
}
}
}
fclose(fp);
fp = fopen("i_ri.txt", "w");
fprintf(fp, "%f", *(p - 1));
fclose(fp);
fp = fopen("r_ri.txt", "w");
fprintf(fp, "%f", *(p - 2));
fclose(fp);
fp = fopen("w.txt", "w");
fprintf(fp, "%f", *(p - 3));
fclose(fp);
return 0;
}
您的代码很好,django-admin.py shell
函数中没有错误。
但是您正在以错误的方式读取文件。 请参见,每次调用#include <iostream>
#include <fstream>
#include <string>
using std::cout;
using std::cerr;
using std::string;
int count = 0; // we will count the total pattern count here
void patternCount(string text, string pattern);
int main() {
cout << "Enter a string ";
string pattern;
std::getline(cin, pattern);
string text;
fstream file_("test.txt");
if(file_.is_open()){
while(std::getline(file_,text))
patternCount(text,pattern);
file_.close();
}else
cerr<<"Failed to open file";
cout << "There are " << count <<" " << pattern << " in your text.\n";
return 0;
}
void patternCount(string text, string pattern){
size_t nPos = text.find(pattern, 0);
while (nPos != string::npos) {
nPos = text.find(pattern, nPos + 1);
++count;
}
}
时,_text的旧结果都会被新行覆盖。因此,在循环的最后,当您将文本传递给patternCount函数时,仅显示文本包含文件的最后一行。
您可以通过两种方式解决它:
patternCount
并更新全局计数变量。std::getline(file_, text)
函数。无论您愿意使用哪种方法,我都实现了第一个,而其他答案中的第二个则实现了。
答案 2 :(得分:0)
此代码仅计算文本文件最后一行中输入字符串出现的次数。如果该行为空或no不包含字符串,则输出结果将为0。
但是我猜想OP要搜索整个文件,在这种情况下,main
函数需要相应地修复。
std::ifstream file{"test.txt"};
std::ostringstream text;
std::copy(std::istream_iterator<char>{file}, std::istream_iterator<char>{},std::ostream_iterator<char>{text});
//...
patternCount(text.str(), pattern);