c언어 문자열 단어만 뒤집기
글쓴이: 하아해킹@Naver / 작성시간: 금, 2017/06/09 - 1:02오후
#include<stdio.h> int main(void) { char test[] = "i am a boy."; int i, j, n, size; char temp; for (i = 0; i <= sizeof(test) - 1; i++) { n= i; size = 0; if (test[i] == ' ') { while (test[n + 1] != ' ') { size++; n++; } for (j=i; j <(size/2)+1; j++) { temp = test[j + 1]; test[j + 1] = test[j + 2]; test[j + 2] = temp; } } } printf("%s\n", test); }
이건데요... 제가 단어만 뒤집고싶은데 잘안되네요 ㅠㅠ 좀 알려주세요ㅠ
Forums:
http://fresh2refresh.com/c
http://fresh2refresh.com/c-programming/c-strings/c-strrev-function/
세벌 https://sebuls.blogspot.kr/
함수를안쓰고 어찌하죠?
함수를안쓰고 어찌하죠?
Quote:strrev( ) function is
플랫폼을 명시하지 않은 C언어 질문글에 비표준 함수를 답변으로 다는 건 그다지 바람직해 보이지 않는군요.
원래 질문으로 돌아가서, C언어에서 문자열을 뒤집는 건 그다지 어려운 문제가 아닙니다.
뒤집을 문자열의 양쪽부터 시작해서 안쪽으로 들어가면서 서로 swap하면 되지요.
보아하니 swap을 어떻게 하는지는 알고 계신 것 같네요.
(Disclaimer: 멀티바이트 문자가 들어있다면 물론 얘기가 크게 달라집니다만, 그 문제는 논외로 합시다.)
문제는 "어디부터 어디까지 뒤집을지" 찾는 것입니다. 보아하니 질문자님의 코드는 공백 문자(' ')를 구분자 삼아 단어를 정의하는 것 같군요.
변수 i와 n이 각각 단어의 시작(의 바로 전)과 끝을 가리키는 변수인 것 같은데, 거기까지만 봐도 이미 문제가 있습니다.
1) 변수 i는 공백 문자를 찾는데, 만일 문자열에 공백 문자가 연이어 나타나면 첫째 공백을 가리킨 채 진행하게 됩니다. 그러길 바라시진 않았을 텐데요.
2) 변수 n은 공백 문자를 찾을 때까지 상한 없이 계속 증가합니다. 문자열이 공백 문자로 끝나지 않을 경우 문자열 끝을 넘어서고 말 겁니다.
3) 일단 단어를 찾고 나면, 다음 단어는 이전에 찾은 단어의 끝 지점에서부터 찾기 시작해야 하지 않을까요. 그렇게 하기 위한 코드가 보이지 않는군요.
단어를 뒤집는 건 일단 둘째치고, "단어의 시작점과 끝점"을 모두 찾아 출력하는 프로그램을 먼저 만들어 올려보세요. 적절한 중간 단계가 될 겁니다.
https://stackoverflow.com
https://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux 도 참고하셔요.
세벌 https://sebuls.blogspot.kr/
댓글 달기