[완료][C언어]문자를 숫자로 바꾸고 싶습니다..잘안되내요..

waakan의 이미지

예를들어 a[0]='1' ,a[1]='2', a[2]='3'의 값을 가지는 배열이 있을때
for(count = 0;count<3;count++)
{
b[count] = atoi(&a[count]);
}
for(count = 0;count<3;count++)
{
printf("%d\n",b[count]);
}
이렇게 해보면 값이
123
23
3
이렇게 나오는데 제가 원하는 값은
1
2
3
이렇게 하나의 정수 배열에 하나의 문자가 들어 가게 하고 싶은데 안되내요..
뭐가 잘못된거죠 ㅠㅠ
<------추가 내용----->
제가 원하는것은 예를들어 숫자 123을 입력받았을때 입력 받는것은
char형 배열입니다. 그런데 그숫자를 각각 대응하는 int형 변수로
변환하고 싶은것인데요..
예를들어 char a[]={1,2,3}이면 이것을 정수형 배열 b[]={1,2,3}으로
바꾸고 싶은것인데요 왜 이렇게 하냐면
입력받은 각각의 숫자를 비교할 필요가 있거든요
a[0] = 1, a[1] = 2, b[2] = 3처음 문자배열은 입력받는것입니다.
b[0] = 1, b[1] = 2, b[2] = 3이런식으로 들어가야지 돼는데
문자 배열을 숫자배열로 일대일로 대응하게 만들고 싶은데 참 어렵내요..

imyejin의 이미지

무슨 언어로 프로그래밍을 하는지부터 올려야 사람들이 답변을 해주죠.

아마도 C 인 것 같은데, C에서 문자에 대한 포인터와 문자열이 어떤 관계에 있는지 먼저 공부하시면 의문이 쉽게 풀릴 겁니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

imyejin의 이미지

Quote:
만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

그게 아니라 "123"이라는 문자열은 {'1','2','3','\0'} 으로 초기화한 문자 배열과 같은 메모리 구조를 가지는 것이죠.

'0' 과 '\0' 은 다릅니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

imyejin의 이미지

왜 잘못된 내용이 포함된 답변을 반복해서 다시는 겁니까?

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

익명 사용자의 이미지

문자열에는 종료문자라는것이 있습니다.

만약에 "123"이라는 문자열이 있다면 실제로는 '1','2','3','0' 이되는것이죠

즉 마지막에 0이 붇습니다 문자열이 끝났다는 의미로

atoi는 이러한 문자열을 숫자로 바꿔주는 역활을 합니다 문자를 숫자로 바꿔주는것이 아니라요

즉 배열에 1,2,3 이렇게 저장되어 있으면 처음 호출시 123으로 바꿔버립니다
다음에 한칸 전진했으니 23 이되겠죠?

원하시는 결과를 낼려면 아스키 코드표를 보시면 됩니다.

간단하게 답만 알려드리면

b[count] = a[count] - '0';
이렇게 하면 됩니다 반드시 아스키 코드표를 보세요

ㅡ,.ㅡ;;의 이미지


무슨의도에의해 저렇게 하셨는지 알순 없지만..

배열에 들어있는 문자를 찍으려면 그냥 printf( "%c", a[i] ); 로찍으면되죠.

%d 로찍은것부터가 뭔가 이상한길로 접어들죠?

----------------------------------------------------------------------------
C Library Development Project


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

waakan의 이미지

제가 원하는것은 예를들어 숫자 123을 입력받았을때 입력 받는것은
char형입니다 그런데 그숫자를 각각 대응하는 int형 변수로 변환하고 싶은것인데요..
예를들어 char a[]={1,2,3}이면 이것을 정수형 배열 b[]={1,2,3}으로 바꾸고 싶은것인데요 왜 이렇게 하냐면
입력받은 각각의 숫자를 비교할 필요가 있거든요
b[0] = 1, b[1] = 2, b[2] = 3이런식으로 들어가야지 돼는데
문자 배열을 숫자배열로 일대일로 대응하게 만들고 싶은데 참 어렵내요..

익명 사용자의 이미지

atoi 를 쓰세요...
아님 윗분 말대로..'0' 빼시면..

ㅡ,.ㅡ;;의 이미지


>>제가 원하는것은 예를들어 숫자 123을 입력받았을때 입력 받는것은
>>char형입니다 그런데 그숫자를 각각 대응하는 int형 변수로 변환하고 싶은것인데요..

음.. 설계가 삼천포로 빠지고 있다는 느낌이 드는군요..
공부가 목적이면 string 에대해 조금더 공부하시면 될듯하고..
무엇을 만들목적이시면.. 숫자를 입력받아 숫자를 문자처럼 문자단위로 나누어 배열에 저장 한다는건 매우 이상한방법이군요..
문자란 이미 숫자로 저장되어 있는것입니다 궂이 int 타입으로 바꾸지 않더라도 이미 숫자처럼 사용할수도 있다는 말이죠..
48이 더해져 있다는 사실만 생각하고 있으면 말입니다.

----------------------------------------------------------------------------
C Library Development Project


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

Necromancer의 이미지

글다는 순간 DB가 오작동했나 봅니다.

글쓰고 '댓글쓰기'버튼을 한번 눌렀을때 반응이 없어서 계속 누르면 저런 현상이 벌어지죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

Necromancer의 이미지

추가로 답변드리자면

첫번째에 123이 나오는 것은 문자열 "123"을 그대로 다 atoi()에 넣었기 때문이죠.
두번째에 23이 나오는 것은 문자열 "123" 중 2부터 시작되는 지점을 넣었기 때문이 atoi()에는 "23"이 들어가고
마지막은 3이 시작되는 지점을 넣었으므로 atoi()에는 "3"만 들어간 것입니다.

문자열내의 각 문자를 별도 문자열로 분리하는 작업이 필요합니다.
"123" -> "1", "2", "3" 식이죠. 그리고 끝에 NULL을 붙여줘야 하는건 아시죠.

아니면 직접 변환시키세요. 숫자 0~9는 ASCII 코드 0x30~0x39 사이 값입니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

오호라의 이미지

하긴 이걸 예전에 애들에게 시켰더니...

몇시간을 끙끙돼도 못하더라구요...

두줄짜리 소스를 보여주니 더욱 이해를 못한다는...

ㅋㅋㅋ.

Hello World.

bearchit의 이미지

제가 질문을 제대로 이해한거라면
간단하게 이런식으로 하면 되지 않나요?

#include <stdio.h>
 
int main()
{
    char a[] = "123";
    int b[3];
    int index = 0, i;
    char *p = a;
 
    while(*p) {
        b<ol>
</ol>
 = *p - '0';
        p++;
        index++;
    }
 
    for(i=0; i<3; i++)
        printf("b[%d] = %d\n", i, b[i]);
 
    return 0;
}

p.s 코드 넣는 태그가 이상한지 중간에 줄바뀜되네요..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.