[ create a new paste ] login | about

Link: http://codepad.org/O0Z6ppTO    [ raw code | output | fork ]

C++, pasted on Aug 4:
#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;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	Text in file
k y e j l d t r 
a e s f h j k l 
q w e e y k i m 
q t b p u i p i 
Word : keep
	Search in Columns
Word length is more than length of text column
	Search in Rows
keep not found in row : kyejldtr
keep not found in row : aesfhjkl
keep not found in row : qweeykim
keep not found in row : qtbpuipi
	Search in Daigonals
keep found in diag     : keep
keep not found in diag : eep
keep not found in diag : ep
keep not found in diag : p


Create a new paste based on this one


Comments: