Найти строку внутри более длинной строки
Привет,
В настоящее время у меня есть имя файла, в котором я хочу найти определенную строку, если это так, то я хочу выполнить конкретные задачи на основе того, какую подстроку я нашел.
Пример:
testdir была/ветчина/тест1.1
testDir/ham/test2. 2
testdir была/спам/test3.3
testdir была/спам/test4.4
Допустим, имя файла хранится в виде строки в файле "strFilename". Смогу ли я использовать strFilename.find("/ham/"), если захочу отделить папки HAM и SPAM? До сих пор в моем коде использование этого метода возвращало только все, кроме того, что я хочу.
Код:
<pre>int main(int argc, char* argv[] ) { int wordCount; int fileStrCount; int hamCount; int spamCount; set<string> seenWords; map<string, int> ham; map<string, int> spam; if( argc < 2 ) { cout << "ERROR: Must have atleast one filename! \n"; } //The user gives a path to a directory containing "index" //File is used to store filename and fList stores them string files = ""; vector<string> fList; //Storing full path of directory to later add /index string pathToDir = argv[1]; string pathToIndex = pathToDir + "index"; ifstream dirIndex( pathToIndex ); //Push back all filenames within index to fList while( getline( dirIndex, files ) ) { fList.push_back( files ); } string thirdWord = ""; //Iterate through filenames and open them for(unsigned x = 0; x < fList.size(); x++) { string goHere = pathToDir + fList[x]; ifstream fileToOpen( goHere ); if( !fileToOpen.is_open() ) { cout << "Error: " << goHere << " cannot open!\n"; return -1; } //Ignore first two lines fileToOpen.ignore( numeric_limits<streamsize>::max(), '\n' ); fileToOpen.ignore( numeric_limits<streamsize>::max(), '\n' ); cout << endl << goHere << endl; if( goHere.find("/ham/") == true ) { while( getline( fileToOpen, thirdWord, ' ' ) ) { ++ham[thirdWord]; ++hamCount; wordCount++; } } else { while(getline(fileToOpen, thirdWord, ' ') ) { ++spamCount; ++spam[thirdWord]; wordCount++; } } cout << "Total Words In File: " << fileStrCount << endl; fileToOpen.close(); fileToOpen.clear(); } cout << endl << endl << endl << "HAM MAP\n"; for(auto elem : ham) { cout << elem.first << " " << elem.second << "\n"; } cout << endl << endl << endl << "SPAM MAP\n"; for(auto elem : spam) { cout << elem.first << " " << elem.second << "\n"; } }
С основным акцентом здесь:
if( goHere.find("/ham/") == true ) { while( getline( fileToOpen, thirdWord, ' ' ) ) { ++ham[thirdWord]; ++hamCount; wordCount++; } } else { while(getline(fileToOpen, thirdWord, ' ') ) { ++spamCount; ++spam[thirdWord]; wordCount++; } }
Что я уже пробовал:
Я пытался заглянуть в str:: substr (), но это тоже не то, что я хочу.