C로 substring만 뽑아내는 것에 대해...
글쓴이: aeronova / 작성시간: 금, 2006/06/09 - 3:26오전
안녕하세요,
Python으로 편하게(?) 살다가 C로 처리해야 해서 상황에 처했습니다.
혼자 끙끙대면서 하다가 조언을 구하고자 질문을 올립니다.
우선 제가 처리해야 할 output에 다음과 같은 line이 있습니다.
x 9.99999853346405e-001
숫자 부분만 가져오기 위해서 공백을 이용해서 문자열을 분리하려고 다음과 같이 code를 작성하였습니다.
while (fgets(line, sizeof(line), fp) != NULL) { // go through line by line: read a line and store it to "line" if(strstr(line, "x")) { printf("%s\n", line); pch = strtok(line," "); // get "x" pch = strtok(NULL, " "); // get whitespace pch = strtok(NULL, " "); // get the number printf("%s\n",pch); X[0] = atof(pch); } }
일단은 strtok을 이용해서 계속 substring을 잘라서 원하는 숫자부분을 얻을 수 있었지만, 작성하고보니 좀 깔끔하지 못한것 같습니다. 혹시 좀 더 나은 방법이 없을까요? 고수님들의 조언 부탁드립니다.
Forums:
문자열의 앞에
문자열의 앞에 공백이 있어도 atof 는 변환을 잘 합니다.
그냥
X[0] = atof(&line[1]);
라고만 하셔도 될 듯 하네요.while (fgets(line,
while (fgets(line, sizeof(line), fp) != NULL)
{
// go through line by line: read a line and store it to "line"
char *ps;
if( (ps = strstr(line, "x"))) {
printf("%s\n", line);
for ( ; *ps && !isdigit(*ps); ps++ ) ;
printf("%s\n",ps);
X[0] = atof(ps);
}
}
어떤 형식이 있다면
어떤 형식이 있다면 구조체로 읽어들어 atof하는것이 나을것 같은데요.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
sscanf를 사용하시면 간단합니다.
헛.. 획기적인.. 방법
헛.. 획기적인.. 방법 ^^
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
...
while (fgets(line, sizeof(line), fp) != NULL)
{
while(isdigit(line[i]) == 0) i++;
X[cnt++] = atof(line+i);
}
댓글 달기