2011-08-29 5 views
-2

특정 형식으로 문자열을 역순으로 원합니다.C의 문자열의 위치를 ​​반대로

예를 들어, "My name is Nishant""Nishant is name My"으로 변환되어야합니다. mid, number_of_wordsexchange의 제정신 정의에 대한

for (i = 0; i < mid; i++) 
    exchange(words[i], words[number_of_words - i]); 

:

+1

지금까지 무엇을 가지고 계셨습니까? – Codo

+2

[문장에서 반전 단어] (http://stackoverflow.com/questions/3276582/reversing-words-in-a-sentence), [문장을 뒤집는 C 프로그램] (http://stackoverflow.com)/questions/4705069/c-program-on-reversing-a-sentence) – outis

+2

피에르가 말한 것은 무엇입니까? 아, 맞아. – slezica

답변

1

당신이 char[] words 배열의 단어가 있다면 그것은 단순한 루프입니다.

전체 내용이 전체 문장을 포함하는 큰 문자 인 경우 먼저 strtok을 수행하면 도움이됩니다. 그런 다음 위의 루프를 사용하십시오.

+0

안녕하세요 ... Mihai 실제로 C lib 함수를 사용하지 않고 C에서 수행해야합니다 – Nishant

+0

미리 감사드립니다 – Nishant

+0

아이디어가 동일합니다. –

0

강사에게 감사드립니다. 숙제 인 경우 직접 작성해야합니다.

약간의 힌트가 있습니다. 끝에 NUL 터미네이터를 치기 전까지 배열의 각 문자를 반복하는 char 포인터를 사용하십시오. 이제 공간을 칠 때까지 반대 방향으로 반복합니다. 장소를 다른 포인터에 저장하고 앞으로 이동 한 다음 출력 버퍼에 NUL을 포함하지 않고 각 문자를 복사합니다.

이제 장소를 저장 한 다른 포인터에서 마지막 공간의 위치를 ​​검색하고 다시 백업하십시오. 당신이 앞으로 나아갈 때 실제로 NUL뿐만 아니라 NULL-ASCII '\ 0'또는 0 바이트의 공간을 만날 때 멈출 필요가 있습니다.

시작 부분에서 앞으로 반복 할 때 어떤 종류의 목록에서 각 공백의 위치를 ​​저장하면 조금 더 빠릅니다. 그렇게하면 각 문자열에 대해 짧은 반복을 사용하여 전체 문자열에 대해 역순으로 반복 할 필요가 없습니다. 이 코드는 좀 더 복잡 할 것입니다.

효율성이 향상되면 개별 영어 문장과 같은 짧은 문자열에 대해서는 중요하지 않지만 메모리로 방금 읽은 큰 파일을 뒤집어 쓰는 경우가 많습니다.

관련 문제