//객체지향 금 123 200911636 박정욱
//2012.5.18 5번 : 17-4 경로의 디렉토리만 출력
#include<iostream>
#include<string>
using namespace std;
char* string_reverse(string file); //문자열을 거꾸로 바꿔서 리턴해주는 함수
char* string_cut_name(string file); //거꾸로 된 문자열의 파일명 부분을 삭제하여 리턴하는 함수
void cut_name_of_directory(string directory); //파일명을 자르는 과정을 출력하는 함수.
//메인함수
void main()
{
string example = //파일대상이 입력된 문자열 변수 example.
"C:\\Program Files\\Starcraft\\StarCraft.exe";
string File; //사용자로부터 파일대상을 입력받을 문자열 변수 file
cout << example << endl; //example의 파일대상 출력.
cut_name_of_directory(example); //example의 파일경로 추출.
cout << "파일대상을 입력하십시오."<< endl; //파일대상 입력.
cin >> File;
cut_name_of_directory(File); //입력받은 파일대상의 파일경로 추출.
}
//파일명을 자르는 과정을 출력하는 함수.
void cut_name_of_directory(string directory) //파일대상을 거꾸로 한후, 처음 "\"를 찾아 그 이하의 문자열을 다시 거꾸로 하여
{ //최종적으로 파일명을 제외한 파일 경로를 출력한다.
string reverse,
reverse_cut_name,
cut_name;
//cout << directory << endl; //파일경로를 출력하여 보여준다(파일명 포함)
reverse = string_reverse(directory); //파일경로를 거꾸로한다
//cout <<"reverse = "<< reverse << endl; //거꾸로 된 파일경로를 출력하여 보여준다.
reverse_cut_name = string_cut_name(reverse); //거꾸로 된 파일경로에서 파일명 부분을 삭제한다.
//cout <<"reverse_cut_name = "<< reverse_cut_name << endl; //파일명이 삭제된 거꾸로 된 파일경로를 출력하여 보여준다.
cut_name = string_reverse(reverse_cut_name); //파일명이 삭제된 거꾸로 된 경로를 다시 거꾸로한다.
cout <<"파일 경로는 " << cut_name <<"입니다."<< endl; //최종적으로 파일명이 삭제된 경로를 출력하여 보여준다.
}
//문자열을 거꾸로 바꿔서 리턴해주는 함수
char* string_reverse(string file) //for문을 이용해 file의 문자열을 거꾸로 하여 리턴한다.
{
char* reverse; //함수 인자(문자열) file을 거꾸로 대입할 변수 reverse
int i; //for문을 사용하기 위한 변수 i
reverse = new char [file.size()+1]; //file의 크기만큼 메모리 할당.
for(i=0 ; i < file.size() ; i++) //reverse에 file을 거꾸로 대입.
{ reverse[i] = file[file.size()-1-i]; }
reverse[i] = NULL; //reverse의 마지막은 NULL을 대입.
return reverse; //거꾸로 입력된 reverse를 리턴한다.
}
//거꾸로 된 문자열의 파일명 부분을 삭제하여 리턴하는 함수
char* string_cut_name(string file) //find함수를 이용해 "\"를 찾아 \의 이전부분을 제외한 file의 문자열을 리턴한다.
{
char* cut_name; //함수 인자(문자열) file의 파일명 부분을 삭제하여 대입 할 변수
int i; //for문을 사용하기 위한 변수 i
cut_name = new char [file.size()-file.find("\\")+1]; //file의 크기 - 파일명 크기 만큼 메모리 할당.
for(i=0 ; i < file.size()-file.find("\\") ; i++) //file명 부분을 제외한 문자열을 cut_name에 대입.
{ cut_name[i] = file[file.find("\\")+i]; }
cut_name[i]= NULL; //cut_name의 마지막 부분은 NULL을 대입.
return cut_name; //cut_name을 리턴한다.
}