2012-04-19 4 views
1

파일의 문자를 대체하는 명령을 쓰려고합니다. 예 : ./replace E XY hello.txt [b] hello.txt [/ b]에는 [b] HELLO WORLD [/ b]라는 단어가 포함되어 있습니다. 문자 E가 XY로 바뀝니다. 따라서 안녕하세요.HXYLLO WORLD가됩니다. 는 내가 말하고자 [100]argv 오류가있는 버퍼 비교

0 1 2 3 4 5 6 7 8 9 10 
[H]-[E]-[L]-[L]-[O]-[]-[W]-[O]-[R]-[L]-[D] 

숯 (BUF)에 파일을 읽음 :

X는 BUF이 경우 특정 버퍼 원소 (인
If buf[x] == argv[1], 
then buf[x] = argv[2] 

[ 1] == argv [1]).

이 오류가 발생합니다 : 할당이 캐스트없이 정수가됩니다..

어떻게 버퍼의 요소를 인수 벡터와 비교할 수 있습니까 ??

+2

프로그래밍 언어? –

+0

형식 문제를 해결하기 위해 구문을 수정할 수 있지만 알고리즘이 매우 불완전합니다. 인수를 반복하고 argv에 다른 첨자를 추가해야합니다 (예 : buf [x] == argv [1] [n]). –

답변

0

당신은 (가능성이 오류 메시지가 주어진 것 같다하는) C를 사용하는 가정 : 당신은 그냥 당신은 지금 포인터를 비교하는 C.의 방법으로 문자열을 비교할 수 없습니다

. 당신은이 작업을 수행 완 :

if (! strcmp(buf, argv)) { 
    // strings are equal 
} 

당신은 C string handling에 대한 자료를 읽어 보시기 바랍니다.

+0

확인. 그러나 문제는 XY로 '나'를 대체하려고하는 것입니다. 그러나 '나는'하나의 요소만을 차지한다. – bos1234

+0

예. In-place 대체보다 약간의 작업이 필요합니다. 문자열을 새 버퍼로 복사하고 복사하는 동안 바꿀 패턴을 검색하십시오. –

0

설명한대로 문자열을 대체하는 프로그램이 필요한 경우 (더 많은 정보가 필요함) streplace을 시도하십시오.

이를 구현하려면, 문자열 처리는 C를 사용해야하는 경우, 당신은 'strcmp와 같은 기능을 (사용해야 C.

보다 훨씬 쉽게입니다 자바, C++ 또는 파이썬 같은 언어를 사용하여 시도) ','strcpy() ','memcpy() '또는'memmove() '를 사용하십시오. 힌트 : char buf[100]은 전체 파일을 읽을 때 유용하지 않을 수도 있습니다.

댓글 후 편집 : 개념과 디자인에 대해 생각해보십시오. 예 : 현재 솔루션을 사용하면 하나의 '읽기'블록에서 시작하고 다음 블록에서 끝나는 일치하지 않을 수 있습니다.

또한 현재 프로그램에는 몇 가지 문제가 있습니다. IMHO 프로그램의 나머지 부분과 엉망인 닫는 괄호를 건너 뛰는 40 행의 주석을 닫는 것을 잊어 버렸습니다.

Please enter : 입력하기 전에 생각하십시오! 먼저 디자인을 작성하고 적어 둡니다.

다음을 수행하십시오. 원래 답변 (특히 문자열 기능이있는 부분)을 읽고 이해합니다. 당신의 프로그램을 개조하십시오.

+0

이것은 지금까지 가지고있는 코드입니다. 오류는 37 행에 있습니다. http://codepad.org/qVZtTDZt – bos1234