#include <stdio.h>
int lineget(char string[]);
void cpspace(char to[], char from[],int);
int main(){
int len; //문자 길이 받아올 변수
char string[1000]; //입력 받을 문자열
char less_space[1000]; //공백 제거 및 탭으로 교환후 다시 넣을 문자열
len = lineget(string); //문자열 입력 및 길이 반환
cpspace(less_space,string,len); //문자열 공백 제거 및 탭 삽입
printf("%s
",less_space); // 문자열 출력
return 0;
}
int lineget (char string[]){
int c,i ;
i = 0;
for(i=0;i<999 && (c = getchar())!= EOF && c!='
\n';i++)
string[i] = c; //getchar 로 입력 받은후 문자열에 저장
if(c == '
\n'){
string[i] = '\n
';
string[i+1] = '\0';
}
return i+1; //길이 반환
}
void cpspace(char to[],char from[],int len){//복사 받을 문자열, 복사 할 문자열, 문자열 길이
int i,j,z,k;
int counting = 0; //새는 중인지 확인할 플래그
k = 0;
j = 0;
z = 0;
for(i = 0; i < len; i++){
if(from[i] == ' '){
j++; //문자열이 공백이면 j를 늘림
counting = 1;
}
else
counting = 0; //문자열이 공백이 아닐시 플래그 0
if(counting == 0){
for(z = z;z+k < i; z++){ //공백이 아닐시 문자열 복사
if(z+j+k == i && j >= 4){ //공백이 4칸 이상일시 탭으로 전환
to[z] = ' \t';
k = k+j-1;
j = 0;
}
to[z] = from[z+k];
}
}
}
}
코드 전문 이구요 k는 비동기 처리를 위해 임의로 넣은 변수입니다
이것보다 깔끔한 코드가 생각이 안나서요
대충 설계하고 들어가긴했는대 잘안되서 수정하다보니
제가 했지만서도 약간 어떻게 한건가 싶고 얼떨떨하네요
확인한번씩 해보시고 충고 및 조언 부탁드립니다.
// 전문은 PRO 가 아니라 전체 라는 말입니다
주석 추가 및 코드 약간 수정했습니다.
코드보기가 너무 힘들어요. 정확히 무슨 기능인지 알려주실레요?
주석 달고 코드 약간 수정하였습니다.
공백이 연속으로 4개가나오면, 탭문자로 바꾸는 프로그램이네요
네 4개이상 나오면 탭으로 바꾸는 겁니다.
가장 간단한 방법은 위 소스코드 같이 네 개가 연속으로 나오면 첫 공백을 탭으로 바꾸고 뒤에나오는 문자열을 끌어당기는 거고,
퍼포먼스 따지는 거라면 탭 문자를 넣을 위치를 기억해 문자열을 끌어당기는 방법이 있겠네요
memmove라는 함수를 사용하면 횔씬 보기좋게 짤 수 있을거예요
memmove 라는 함수도 있었군요... 감사합니다 그리고 댓글돌이 위의 말이랑 그밑의 말이은 같은 뜻인거같은대 맞나요?