본문 바로가기
컴퓨터/C, C++

[C언어] CSV 컴마 < , >로 구별된 숫자를 출력하는 프로그램

by 도도새 도 2021. 12. 8.

CSV ','로 구분된 숫자 출력

 

CSV란?

CSV란 Comma-Separated Values의 줄임말로서, 컴마로 구분된 텍스트를 뜻합니다. C언어에서 컴마로 구분된 숫자 문자열을 받아 그 숫자들을 하나씩 출력하는 프로그램을 작성합니다.

 

CSV C언어 코드

CSV C언어

간략 설명

6번째 줄 : 진행하는 index의 값이 get_value함수를 벗어나도 기억되도록 static으로 선언합니다.

 

9번째 줄 : 배열에 저장된 문자열의 길이만큼 반복합니다.

 

10 ~ 11번쨰 줄 : 만약 i번째 문자가 컴마가 아니고, 숫자인 문자라면, 

12 ~ 14번째 줄 : outputNum을 숫자로 채웁니다. 문자 1 2 3 은 123으로 저장되어야하기 때문에 10을 곱하며 진행하고, 또한 문자에서 - '0'만큼 아스키값을 뺌으로서 숫자로 전환합니다.

12번째 줄에서 10을 우선 곱하는 이유는 ,그래야 그 후에 outputNum에 들어오는 수가 일의 자리 숫자가 될 수 있기 때문입니다. 만약 10을 나중에 곱하면 1의자리 숫자를 얻지 못하고, 제일 낮은 자릿수가 10의자리일 것입니다.

 

16번째 줄 : 만약 문자열의 끝일 경우, outputNum을 반환합니다.

 

21~23번째 줄 : 컴마를 만날 경우 인덱스 값을 1 더하고 outputNum값을 반환합니다.

 

26번째 줄 : 문자열의 끝까지 검사 및 처리를 다 했으면 -1을 반환합니다.

 

34번째 줄 : -1을 반환받으면 출력을 멈춥니다. 함수를 콜해서 함수로 들어가면 outputNum은 0으로 초기화되며, index값은 앞서 진행한 상황이 유지됩니다. 따라서 for문을 들어갈 때, 배열의 처음부터 시작하는 것이 아닌, index값부터 다시 배열을 검사하게 됩니다.

#include <stdio.h> 
#include <string.h>

int get_value(char str[], int len) {
	int i;
	static int index;
	int outputNum = 0;
	
	for(i = index; i <= len; i++){
		if(str[i] != ','){
			if(str[i]>='0' && str[i]<='9'){
				outputNum *= 10;
				outputNum += str[i] - '0';
				index++;
			}
			else if(str[i] == '\0'){
				index++;
				return outputNum;
			} 
		}
		else{
			index++;
			return outputNum; 
		} 
	}
	return -1;
}

int main(void) {
	int num;
	int len;
	char str[]="123,456,879";
	len = strlen(str); 
	while ((num=get_value(str, len))>0)
		printf("%d\n",num);
	return 0;
}

이상으로 C언어에서 CSV, 컴마로 나눠진 숫자를 인트형태로 출력하는 프로그램을 정리했습니다.

공부한 것을 정리하며 나아가는 블로그입니다. 오타, 오류, 개선사항 등을 발견시 댓글 부탁드리겠습니다.

댓글