#include <string>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
string data =
"kyejldtr\n"
"aesfhjkl\n"
"qweeykim\n"
"qtbpuipi\n";
int main()
{
int i, j;//Счётчики
int diag;//Будет содержать число диагоналей в которые помещается столбец
string word;//Будет содеражть в себе слово из текста
string line;//Будет содержать текущую строку текста
vector<string> text;//Будет содержать в себе текст из файла (2D char массив)
vector<string>::iterator it;//Это итератор - конструкция позвояющаяя работать
//с конейнером как с массивом
stringstream ifs(data);//Инициализируем поток чтения для файла данных
{
//Построчное чтение файла
while(getline(ifs,line))
text.push_back(line);//Добавляем строку в наш 2-мерный массив символов
cout<<"\tText in file\n";
//Вот цикл печати элементов вектора
//сделал его просто дабы была понята роль итератора
for(it = text.begin(); it < text.end() ;it++)
{
for(i = 0; i < (int) (*it).length();i++)
cout<<(*it)[i]<<" ";//Печатаем [i] букву строки и пробел после неё
cout<<endl;
}
cout<<"Word : "<<(word = "keep")<<endl;
cout<<"\tSearch in Columns\n";
//проверка на случай если длинна слова больше длинны столбца
if((int)(text.begin() - text.end()) < (int)word.length())
cout<<"Word length is more than length of text column\n";
else//Поиск в столбцах
for( j = 0 ; j < (int)word.length() ; j++)
{
data.resize(0);//Очищаем строку
//Накапливаем строку с данными столбца
for(it = text.begin(); it < text.end() ;it++)
data += (*it)[j];
if(word.find(data,0) != string::npos)
cout<<word<<" found in col : "<<data<<endl;
else
cout<<word<<" not found in col : "<<data<<endl;
}
it = text.begin();
line = (*it);
cout<<"\tSearch in Rows\n";
//проверка на случай если длинна слова больше длинны строки
if(line.length() < word.length())
cout<<"Word length is more than length of text row\n";
else//Поиск в строках
for(it = text.begin(); it < text.end() ;it++)
{
if((*it).find(word,0) != string::npos)
cout<<word<<" found in row : "<<(*it)<<endl;
else
cout<<word<<" not found in row : "<<(*it)<<endl;
}
cout<<"\tSearch in Daigonals\n";
//Получаем число диагоналей число символов в строке - число строк
diag = (int)line.length() - (int)(text.begin() - text.end());
if(diag < 0)
diag = (-1)*diag;
for(i = 0; i < diag; i++)
{
data.resize(0);//Очищаем строку
//Накапливаем строку с данными диагонали
if(text.begin() + i < text.end())
{
for(j = i; j < (int)word.length(); j++)
{
it = text.begin() + j;
data += (*it)[j];
}
if(data.find(word,0) != string::npos)
cout<<word<<" found in diag : "<<data<<endl;
else
cout<<word<<" not found in diag : "<<data<<endl;
}
else
break;
}
}
return 0;
}