C 언어 간단한거 질문좀 드려도될까요?
파싱하여 탐색하는걸 만드려고하는데요
pattern.txt 파일이 있습니다
이 파일에는
abc hello
def hi
ghi hello
이렇게 3줄이 있습니다
프로그램은
"문자열.문자열" 형태로 입력을 받습니다
예를들어 "hi.def" 로 입력을 했다고 하면
입력받은 문자열의 점을 기준으로 왼쪽에 있는 문자열과
프로그램이 연 pattern.txt 파일에서 한줄을 읽어서 공백을 기준으로 우측에있는 문자열과 비교합니다
첫번째 줄은 "abc hello" 이므로 공백의 우측 문자열인 "hello" 와 입력받은 "hi" 를비교해서
같지 않기 때문에 다음 문자열로 넘어갑니다
두번째 문자열의 "def hi" 에서 공백을 기준으로 우측 문자열인 "hi" 와 입력받은 "hi" 를 비교해서
같기 때문에 입력받은 문자열의 점을 기준으로 우측 문자열인 "def" 와
파일 두번째 줄에서 읽은 문자열의 공백 좌측 문자열인 "def" 와 비교해서
같으면 같다 틀리면 틀리다 라고 출력합니다
근데 입력을 "hello.ghi" 라고 주면
위의 알고리즘대로라면
먼저 입력받은 문자열에서 점 좌측문자열인 "hello" 와
프로그램이 연 파일의 첫줄부터 비교해서
첫번째 줄의 공백 우측문자열인 "hello" 와 비교해서 일치하니까 바로 입력받은 문자열의 공백 우측인
"ghi" 와 파일의 "abc" 를 비교해서 틀리니까 틀리다 라고 표시합니다
이럴때
enum 을 사용하여 pattern.txt 파일에서 공백 좌측의 문자열들을
묶어줄수 있을까요?
예를들어 파일의 공백 좌측 문자열들 중에서
우측 문자열이 같은 것들끼리 enum 으로 묶는다면
"hello.ghi" 를 입력해도 첫번째 줄에서 "abc" 와 매칭하여 틀리더라도
ghi 와 abc 를 enum 으로 어떻게 같다고 할수있으면 같다라는 결과를 내게 하고싶습니다
가능할까요..?
이해하기 힘드시다면 죄송합니다 ㅠ
글 안에 답이 보이는데요... 파일안에 hello가
글 안에 답이 보이는데요...
파일안에 hello가 여럿 존재할 수 있음에도 불구하고 맨 처음 발견한 hello의 왼쪽값과 유저가 입력한 hello.의 오른쪽 값만 비교해서 틀리니까 루프를 나와버려서 그런거네요. 한 번 실패하더라도 파일안에 다른 hello가 있을 수 있으니까 파일 끝까지 찾아보고 그래도 없으면 실패.
음... 그리고 제가 검색쪽에 전문가는 아니지만 한 마디 덧붙인다면 알고리즘 자체를 다시 생각하시는 게 좋을겁니다.
(물론 파일 크기와 용도에 따라 다릅니다. 단순히 공부를 위한 것이라면 죄송.)
저렇게 linear하게 검색해서는 키 값에 따라 검색 반응속도가 달라지죠. (파일 처음부분에 있다면 빨리 튀어나오겠지만, 마지막 부분에 있다면?)
보통은 해쉬 테이블 같은 걸 작성해서 파일 사이즈에 관계없이 일정한 속도로 키에 해당하는 밸류를 찾도록 할 겁니다.
생산적인 댓글을 달자
파일안에 우측 문자열이 같은것이 두개이상일경우 제일
파일안에
우측 문자열이 같은것이 두개이상일경우
제일 처음 우측문자열과 입력한 좌측문자열이 일치할경우
루프를 나와버리고 맞다 틀리다 결과를내게 만들었는데
enum 을 사용해서 데이터를 묶어두면 알고리즘 수정없이 어떻게 가능하지않을까요
"데이터를 묶는다" 라는 발상은 틀린게 아닌데, 그
"데이터를 묶는다" 라는 발상은 틀린게 아닌데, 그 수단이 왜 enum인지 이해가 안되네요.
해쉬를 사용한다는게 무슨 뜻인지는 이해하셨나요?
생산적인 댓글을 달자
무슨 질문인지 잘 모르겠습니다.
떠오르는 대로 코드를 짜봤는데, 어떤 부분에서 어떻게 되면 좋을지 말씀해주세요.
처음에 딕셔너리 생각을 하고 짜다가 키 값 중복도 못 막고 그러기에
이름을 딕셔너리를 의미하는 Dict에서 List로 바꿨습니다. 혹시 안 바꾼 부분이 있을지 몰라서요.
저는 이렇게 생각했습니다.
전체탐색 말곤 답이없을까요
전체탐색 말곤 답이없을까요
이해할 수 없습니다.
이 글은 마치. 일종에 언어해석기 같습니다.
프로그램을 언어화(한글등) 하는 자동화 프로그램 형식이라고 생각됩니다.
아니면. 외국사람이 한국어로 번역기를 사용했거나요??
하튼. 읽어보면.
//pattern.txt
abc hello
def hi
ghi hello
//설명.
1. 입력값 왼쪽과 첫줄에서 읽은값 우측
2. 입력값 왼쪽과 두번째줄에서 읽은값 우측
3. 입력값 우측과 두번째줄에서 읽은값 좌측
//"문자열.문자열" 입력
var input_all = "hi.def";
입력받은 문자열의 점을 기준으로 왼쪽에 있는 문자열
var input_left = "hi";
var input_right = "def";
//프로그램이 연 pattern.txt 파일에서 한줄을 읽어서 공백을 기준으로 우측에있는 문자열과 비교합니다
var string_right = "hello";
//공백의 우측 문자열인 "hello" 와 입력받은 "hi" 를비교해서
if(string_right == input_left)
{
return;
}
else
{
//같지 않기 때문에 다음 문자열로 넘어갑니다
}
//두번째 문자열의 "def hi" 에서 공백을 기준으로 우측 문자열인 "hi" 와
var string_right2 = "hi";
//입력받은 "hi" 를 비교해서 : input_left
if(string_right2 == input_left)
{
//같기 때문에??
질문1. 무엇이 같은건가요? 같은 경우~ 를 의미하는건가요?
//입력받은 문자열의 점을 기준으로 우측 문자열인 "def" 와 : input_right
//파일 두번째 줄에서 읽은 문자열의 공백 좌측 문자열인 "def" 와 비교해서 : def hi
var string_def = "def";
//같으면 같다 틀리면 틀리다 라고 출력합니다
if(input_right == string_def)
{
//같다.
}
else
{
//틀리다.
}
}
-------------------------------
//프로그램 종료.
-------------------------------
//근데 입력을 "hello.ghi" 라고 주면
재시작.
//pattern.txt
abc hello
def hi
ghi hello
//설명.
1. 입력값 왼쪽과 첫줄에서 읽은값 우측
2. 입력값 왼쪽과 두번째줄에서 읽은값 우측
3. 입력값 우측과 두번째줄에서 읽은값 좌측
//결과
hello - hello
hello - hi
ghi - def
-----------------------------------------------------
//위의 알고리즘대로라면
//먼저 입력받은 문자열에서 점 좌측문자열인 "hello" 와
//프로그램이 연 파일의 첫줄부터 비교해서
var input_left = "hello";
var string_all = "abc hello";
var string_right = "hello";
//첫번째 줄의 공백 우측문자열인 "hello" 와 비교해서 일치하니까
//바로 입력받은 문자열의 공백 우측인 "ghi" 와 파일의 "abc" 를 비교해서 틀리니까 틀리다 라고 표시합니다
- 이건 틀린 말입니다. 위의 공식에 따르면. 여기서 abc는 hello 여야 합니다.
//이럴때
//enum 을 사용하여 pattern.txt 파일에서 공백 좌측의 문자열들을
묶어줄수 있을까요?
- abc def ghi 이렇게 말인가요?
//예를들어 파일의 공백 좌측 문자열들 중에서
//우측 문자열이 같은 것들끼리 enum 으로 묶는다면
- 어떻게 묶을까요??
//"hello.ghi" 를 입력해도 첫번째 줄에서 "abc" 와 매칭하여 틀리더라도
-- hello와 매칭이 틀리더라도.
//ghi 와 abc 를 enum 으로 어떻게 같다고 할수있으면 같다라는 결과를 내게 하고싶습니다
//가능할까요..?
- 여기서 abc는 hello로 여겨집니다.
결론.
공식은 가능하지만.
어떤것을 어떻게 묶어야 하는지에 대한 설명과
중간중간 오류적인 공식문법등이
충분히 설명되야 할거 같습니다.
이 글의 작성자가.
프로그램의 초보이거나
불편하신 분의 글이기를 바랍니다.
그렇지 않고. 장난 글이나 쓰는 쓰레기는 아니기를 바랍니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
그냥 초보개발자인 한국사람이 한국회사에서 컨텐츠
그냥 초보개발자인 한국사람이 한국회사에서 컨텐츠 확장자 불일치 탐지모듈 만들다가 올린 질문입니다
"입력파일의 컨텐츠에 해당하는 실제 확장자" + "공백" + "입력파일의 컨텐츠의 아웃풋"
으로 이루어진 패턴파일에
입력으로 파일이름을 주면 그 파일의 내용에 해당하는 확장자를 추출하여
그 확장자를 입력으로 받은 파일이름에 있을 . 뒤의 확장자와 비교하는 모듈 개발중에
wma, wmv, asf 등의 파일들은 컨텐츠 아웃풋이 동일해서
저 확장자들은 같이 취급하고싶은데
(ex : test.wma, test.asf 둘다 컨텐츠와 확장자 일치)
그게 안되서 질문한건데 제가 언어가 딸려서 죄송합니다
두 짝 (x, y)를 입력받아서 (x1, y1),
두 짝 (x, y)를 입력받아서 (x1, y1), (x2, y2), ...에 있나 없나 찾는 과정이네요.
그냥 오류 내지 말고 리스트에 있는걸 전부 다 찾아서 돌아가거나
오른쪽 짝이 같은 것들을 다 묶어서 (x1, (y11, y12, y13, ...)), (x2, (y21, y22, y23, ...)) ... 이런식으로 자료를 만들어 두면 될 것 같은데요.
abc든 ghi든 hello만 같으면 같다고 출력하고 싶다면, 처음부터 사전의 왼쪽 단어와 입력의 오른쪽 단어들을 비교할 필요조차 없는 거겠죠.
피할 수 있을때 즐겨라! http://melotopia.net/b
한번 탐색에 성공했다고 (맞든 틀리든 유저가
한번 탐색에 성공했다고
(맞든 틀리든 유저가 입력한값의 점 좌측문자열이나 파일의 공백 우측문자열 비교해서 같을경우)
멈추지않고 계속 찾아돌리는것을 생각했는데
사실 제가 본문에선 파일에 3줄이라고해놨는데 꽤 많구
입력도 문자열 한개가아니라 엄청나게 많아질수도있어서
처음 비교가 같은것들을 전부찾아내는 방법은 제외하였습니다...
오른쪽 짝이 같은 것들을 다 묶는다고 말씀하셨는데
enum 열거형 변수를 사용해서 가능한걸까요?
댓글 달기