C에서 string 처리..

strongspirit의 이미지

안녕하세요.
이번 방학때 C를 공부하고 있습니다.

문제를 풀고 있는데
문제의 내용은 command line argument로
숫자를 받아서 적절히 어떤 처리를 하는 것입니다.

적절한 어떤 처리같은 경우 간단히 할 수 있는데
문제는 command line argument를 숫자화 시키는데
있었습니다.

java같은 경우에는 간단히 할 수 있는데
C에서는 쉽지가 않더군요.

제가 처리한 방법은 argv[1]을 strcpy()를 사용하여
char 배열에 복사한 뒤 처리하는 방법이였습니다.

즉 command line argument로 1234를 받을 경우에
일단 1이면 숫자 1을 return 하는 식의 function을 하나 두고
차례대로 1x10^3+... 이런식으로 풀어나갔습니다.

혹시 다른 방법은 없는지요?

그럼 즐거운 하루 되세요.

taeyeung의 이미지

atoi()라는 함수를 참고하세요

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
    int a;

    a = atoi( argv[1] );

    return 0;
}
feelpassion의 이미지

strtol()함수가 더 보안에 안정적이랍니다.

남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.

익명 사용자의 이미지

만사 다 귀찮은데 sscanf는 어떻습니까?

int ret, a;

ret = sscanf(argv[1], "%d", &a);

if ( ret != 1 )
{
    printf("Invalid  command line argument");
    return EXIT_FAILURE;    // #include <stdlib.h> 필요
}
Necromancer의 이미지

시간남으시다면 직접 구현해보세요.

C에서 문자열은 끝이 NULL(0)로 끝나는 ascii 코드의 일차원 배열입니다. 숫자라면 그 값이 0x30-0x39 사이겠군요.

Written By the Black Knight of Destruction

ㅡ,.ㅡ;;의 이미지

strongspirit wrote:

java같은 경우에는 간단히 할 수 있는데
C에서는 쉽지가 않더군요.
.

C가 더쉬워요.
받아서 출력하는것 간단히는

int main( int argc, char **argv )
{
printf( "%d\n", atoi( argv[1] ));
return 0;
}
이죠.


----------------------------------------------------------------------------

익명 사용자의 이미지

흑기사 wrote:
숫자라면 그 값이 0x30-0x39 사이겠군요.

<ctype.h>의 isdigit를 쓰는 것이 좋습니다. magic number는 언제나 피하는 것이 좋습니다.

한가지 흥미로운 사실을 덧붙이자면

if ( c >= '0' && c <= '9' ) { ... } /* 표준에 의해 이식성 보장 */

if ( c >= 'a' && c <= 'z' ) { ... } /* 표준은 이식성을 보장하지 않음 */

C에서 사용되는 character set은 0-9까지는 연속적이어야 하지만 영어 대문자 소문자의 배치순서는 어떻게 되어도 상관이 없습니다. 실제로 EBCDIC란 character set에서는 a-z가 연속적이지 않습니다.

http://www.dynamoo.com/technical/ebcdic.htm
http://www.dynamoo.com/technical/ascii-ebcdic.htm

물론 일반적인 프로그래머가 ASCII 이외의 character set을 마주칠 일은 거의 없습니다. 하지만 미래에도 얼마든지 UCS2나 UCS4같은 전혀 다른 character set으로 바뀔 수 있다는 점을 생각해 볼 때, 그리고 자신이 짠 코드가 의외로 수십년간 그대로 살아 남을 수 있다는 점을 생각해 볼 때 isdigit 등의 함수 사용을 적극 권장하는 바입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.