Вітаю всіх з Новим Роком
Власне назва теми це узагальнена тема питання. Питання стоїть трохи інше:
Як можна зчитувати з текстового файлу по декілька слів?
Власне потрібно зчитуванні слова формувати в шингли (послідовність слів).
Приклад шинглів:
▼Даний текст
Астероїди або малі планети, здебільшого обертаються між орбітами Марса
і Юпітера й невидимі неозброєним оком.
Текст оброблюється (видаляються всі символи, та літери приводяться до нижнього регістру)
▼Текст поділений на шингли
астероїди або малі
або малі планети
малі планети здебільшого
планети здебільшого обертаються
здебільшого обертаються між
між орбітами марса
орбітами марса і
марса і юпітера
юпітера й невидимі
й невидимі неозброєним
невидимі неозброєним оком
1. Є такий варіант: використати два цикла
Але такий варінт досить не ефективний при роботі з великими текстами.
2. Є інший варіант (яким я користувався):
Також не влаштовує, тому що програмі потрібно буде зчитувати 2 тексти, обробити тексти, розбити на шигли і потім їх перевіряти між собою, що призведе до дуже довгої роботи.
Ось код працюючої програми (з використанням 2-го варіанту):
▼Прихований текст
#include <iostream>
#include <string>
#include <locale>
#include <fstream>
using namespace std;
// Приведення до нижнього регістру
string toLow(string inputText)
{
for (int i = 0; i < inputText.length(); i++)
inputText[i] = tolower(inputText[i]);
return inputText;
}
// Видалення зайвих символів
string delSymbols(string inputText)
{
for (int i = 0; i < inputText.length(); i++)
if ((isalpha(inputText[i]) == false) && (inputText[i] != ' '))
{
inputText = inputText.erase(i, 1);
i--;
}
return toLow(inputText);
}
// Видалення зайвих пропусків
string delSpace(string inputText)
{
for (int i = 0; i < inputText.length(); i++)
if (inputText[i] == ' ')
{
int j;
j = i + 1;
while (inputText[j] == ' ')
inputText.erase(j, 1);
}
return delSymbols(inputText);
}
int main()
{
string stringText, textString;
ifstream fileUse("TextFile__.txt");
while (!fileUse.eof())
{
getline(fileUse, textString);
stringText += textString;
}
fileUse.close();
//getline(cin, stringText);
stringText = delSpace(stringText);
// Розбиття тексту на шигли
const int n = 250;
string str[n], strWork_01, strWork_02;
int wordCount = 0;
int firstSpace, lastSpace, secondSpace;
stringText += " ";
strWork_01 = stringText;
strWork_02 = stringText;
for(int i = 0; i < stringText.length(); i++)
{
firstSpace = strWork_01.find(" ");
if (firstSpace != -1)
{
strWork_01.erase(0, firstSpace + 1);
wordCount++;
}
else
break;
}
strWork_01 = stringText;
for(int i = 0; i < wordCount - 2; i++)
{
firstSpace = strWork_02.find(" ");
strWork_02.erase(0, firstSpace + 1);
secondSpace = firstSpace + strWork_02.find(" ");
strWork_02.erase(0, secondSpace - firstSpace + 1);
lastSpace = secondSpace + strWork_02.find(" ");
secondSpace += 1;
lastSpace += 2;
str[i] = strWork_01.substr(0, lastSpace);
strWork_01.erase(0, firstSpace + 1);
strWork_02 = strWork_01;
cout << str[i] << endl;
}
cout << endl;
system("pause");
return 0;
}
Ось текстовий файл з яким працює програма:
Post's attachmentsTextFile__.txt 1.43 kb, 805 downloads since 2014-01-02