CSV ','로 구분된 숫자 출력
CSV란?
CSV란 Comma-Separated Values의 줄임말로서, 컴마로 구분된 텍스트를 뜻합니다. 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, 컴마로 나눠진 숫자를 인트형태로 출력하는 프로그램을 정리했습니다.
공부한 것을 정리하며 나아가는 블로그입니다. 오타, 오류, 개선사항 등을 발견시 댓글 부탁드리겠습니다.
'컴퓨터 > C, C++' 카테고리의 다른 글
[C]c언어 배열과 문자열, 배열에 문자열 대입하기 (0) | 2022.05.07 |
---|---|
[C] C언어의 포인터 및 배열 정리, 포인터와 배열의 관계 (0) | 2022.04.06 |
[C언어] 단어 개수를 세는 프로그램, 공백으로 단어 구별 (0) | 2021.12.08 |
[C언어] 아스키 코드 활용 소문자를 대문자로 바꾸기 (0) | 2021.12.07 |
[C언어] 아스키코드 활용 알파벳 판별 및 대소문자 판별 프로그램 (0) | 2021.12.07 |
댓글