데이터 구조 - 알고리즘 (003) (문장 을 뒤 집 는 단어)

1336 단어
[설명: 본 고 는 자기 귀납 적 정리 와 상호 교류 에 국한 되 며 오류 가 있 으 면 여러분 께 서 지적 해 주 십시오. 연락 메 일: [email protected]
제목: 영어 문장 을 입력 하고 문장의 단어의 순 서 를 뒤 집 지만 단어 내 문자 의 순 서 는 변 하지 않 습 니 다.문장 중의 단 어 는 빈 칸 으로 구분 된다.간단 한 견 해 를 위해 문장 부 호 는 일반 자모 와 같이 처리한다.예 를 들 어 'I am a student' 를 입력 하면 'student. a am I' 를 출력 합 니 다.
제목 분석:
해법 1, 2 차 문자열 뒤 집기, (1) 전체 문자열 뒤 집기 (2) 문장 에 있 는 단어 뒤 집기
해법 2. 역순 복사, 문자열 끝 에서 부터 단 어 를 단위 로 다른 메모리 에 순서대로 복사 하고 순서대로 배출 합 니 다.
알고리즘 구현:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *rev_str_word(char *str)
{
	char *start = str;
	char *end = str + strlen(str);
	char *space = end;
	
	char *re = strdup(str);
	char *temp = re;

	/*@space point to last space*/
	while((space = strrchr(str, ' ')) != NULL)
	{
		int len = end-space;
		memcpy(re, space, len);
		re += len;
		end = space;
		*space = '\0';
	}

	/*copy last str*/
	if(strlen(start) != 0)
	{
		*re = ' ';
		memcpy(++re, start, strlen(start));
	}
	return temp;
}

int main(int argc, char *argv[])
{
	char *str = rev_str_word(argv[1]);
	printf("%s-->%s
", argv[1], str); free(str); return 0; }

좋은 웹페이지 즐겨찾기