好了,所以我簡單的項目應該來搜索特定字符串在一個.txt文件中找到的所有案件。案件事宜,如果這個詞在另一個詞中被發現則很重要。奇怪的加入 - 計數出現一個詞的次數在文件
(例如:如果單詞是 「該」:
有效的發現包括:
蘋果= 1;
的戲劇性= 2;
無效的發現包括:
第四象(th與e之間的空格)
蘋果(市值)
如果這個詞是在一條線上的文件發現,我應該打印出來的線一次。 如果沒有找到它,我不應該打印它。
因此,舉例來說,我的程序的一個運行應該輸出:
Searching for 'the' in file 'test.txt'
2 : that they do not use permeates the [C++] language. Another example
3 : will further illustrate this influence. Imagine that an integer
5 : What bit value should be moved into the topmost position? If we
6 : look at the machine level, architectural designers are divided on
8 : the most significant bit position, while on other machines the sign
9 : bit (which, in the case of a negative number, will be 1) is extended.
10 : Either case can be simulated by the other, using software, by means
# occurrences of 'the' = 13
不幸的是,我越來越
Searching for 'the' in the file 'test.txt'
2: that they do not use permeates the [C++] language. Another example
3: will further illustrate this influence. Imagine that an integer
5: What bit value should be moved into the topmost position? If we
6: look at the machine level, architectural designers are divided on
8: the most significant bit position, while on other machines the sign
9: bit (which, in the case of a negative number, will be 1) is extended.
10: Either case can be simulated by the other, using software, by means
11: of a combination of tests and masks.
12:
# occurrences of 'the' = 15
我不理解爲什麼它認爲它發現了一個「了」在線路11和12
這是我的代碼:
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
int main(int argc, char* argv[]){
//a char pointer is a c-string
//the array is just an array of char pointers
//argv[0] = pointer to the word to search for
//argv[1] = pointer to fileNames
//includes program name @ 0, so three args
if (argc == 3){
int wordCounter = 0;
ifstream myFile(argv[2]);
if (!myFile){
cout << "File '" << argv[2] << "' could not be opened" << endl;
return 1;
}
else {
//counts the number of lines in file
int counter = 0;
//holds the new line in the file
char line[100];
//copies string into buffer that is length of word
const char * word = argv[1];
//holds whether found word
bool found = false;
cout << "Searching for '" << word << "' in the file '" << argv[2] << "'" << endl;
//number of chars in a line
int numChar = 0;
//saves every line
while (!(myFile.getline(line, 100)).eof()) {
//starts every new new at not having found the word
found = false;
//read in new line, so increases line counter
counter ++;
numChar = 0;
//find length of line
for (int i = 0; line[i] != '\n' && i < 101; i++){
numChar++;
}
//finds how many times the key word appears in one line
//checks up to a few before the end of the line for the word
if (numChar >= strlen(argv[1])){
for (int i = 0; i < numChar - strlen(argv[1]); i++){
//if the current line letter equals the first letter of the key word
if (line[i] == word[0]){
//continue looking forward to see if the rest of it match
for (int j = 0; j < strlen(argv[1]); j++){
//if word doesn't match break
if (word[j] != line [i+j]){
break;
}
//if matches all the way to end, add counter
if(j == strlen(argv[1]) - 1){
wordCounter++;
found = true;
}
}//end 2ndfor
}
}//end 1stfor
//if the key word has been found, print the line
if (found){
cout << counter << ": " << line << endl;
}
}
}//endwhile
cout << "# occurrences of '" << word << "' = " << wordCounter << endl;
myFile.close();
}//end else
}//end if
return 0;
}//end main
Urg,你不允許使用'std :: string'嗎? –
'std :: string' + while-loop使這個問題**瑣碎**。如果你的教師不讓你使用這樣的標準庫實體,他們正式脫離現實,他們已經贏得了他們無疑的頭銜。 – WhozCraig