2009-10-01 1 views
1

나는 사용자 입력 a-z 또는 c-z 또는 c-p 또는 무엇이든을 가질 수 있고 그 둘 사이의 실제 문자를 반환 할 수 있기를 원합니다. 나는 다음과 같이 사용할 수 그래서 ASCII 번호를 사용해야합니다 생각 : '-'에 대한a-z를 abcdef .... z로 출력하도록 변환 하시겠습니까?

  1. 봐, 경우 (AZ에서의 char a)에 입력 된 첫번째 문자에서

  2. 사실 봐,

  3. 인쇄 첫 글자 ASCII 번호에 따라 ASCII 번호 찾기, ASCII 번호를 입력 (AZ에서 숯불 Z)가 마지막 문자에서

  4. 봐 찾을 후, 마지막까지 루프 인쇄 나머지와 az의 편지 (이 경우 z).

여기 내 코드가 있지만, 생각해 봅니다. 그게 내가 필요로하는 것이라면 C의 ASCII 자료를 잘 이해하지 못합니다.

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

void expand (char s1[], char s2[]){ 
    int j = 0; 
    for (j; j <= s1[j-1]; ++j){ 
     if(s1[j+2] = '-'){ 
      while(j <= 70){ 
       ++j; 
       printf("%c\n", s1[j]); 
      } 
     }else{ 
      printf("Invalid\n"); 
     } 
    } 
} 

int main(){ 

    int g = 40; 
    char s1[g], s2[g]; 

    printf("Please enter a-z or an equivalent:\n"); 

    scanf("%s", s1); 
    expand(s1, s2); 
    return 0; 
} 
+0

코드를 들여하십시오, 그것은 더 읽을 수 있도록합니다. 이것이 의미하는 바를 알지 못했다면 각 새 블록에 탭을 추가하는 것입니다 (새로운 블록은 함수 내부, 잠시 동안, if 내부 등 {} 안에있는 코드입니다) –

+0

흥미롭고 재미있는 질문입니다. – GManNickG

답변

2
char i; 
char *str = "c-k"; 
for (i = str[0]; i <= str[2]; i++) { 
    printf("%c", i); 
} 

코드 많은 오류 검사/코너 조건을하지 않습니다,하지만 당신은 아이디어를 얻을. 대신 화면에 인쇄하는 결과 문자열을해야하는 경우

, 당신이 (당신이 원하는 형식의 수 str을 확인했다고 가정)을 수행 할 수 있습니다

char i; 
// this will allocate memory so that the result can be stored 
char *rv = (char *)malloc(((str[2] - str[0]) + 1) * sizeof(char)); 
for (i = str[0]; i <= str[2]; i++) { 
    rv[i - str[0]] = i; // i - str[0] will result in 0, 1, 2 everytime you iterate 
} 
rv[i - str[0]] = '\0'; 

나는 또한을 통해 독서 권장합니다 K와 R과 같은 좋은 C 서적의 처음 몇 장을 읽으십시오. 그런 것들에 대한 좋은 이해를 얻으실 수 있습니다.

1

처음에는 table of ASCII character codes here.을 찾을 수 있습니다.이 코드를 사용하면 작업이 상대적으로 간단 해집니다. 그것은 (의사 코드의 형태로)이 라인을 따라 갈 것입니다 : function_name(int[] a) :

C에 더 구체적인 내용은
take_input_from_user(); 
parse_the_input(); 

for (int = first_characters_number, i =< last_characters_number; ++i) 
{ 

    our_character = i; 
    print_out(our_character); 
} 

이, IIRC이 같은 배열을 전달할 수 없습니다. IIRC, 그것은 마치 function_name(int* a)과 같이 움직여야합니다. 그러면 포인터를 무시하고 재미있는 것을 할 수 있습니다.

+2

이 문제의 ASCII 코드를 알 필요는 없습니다. –

+0

사실,이 문제는 필요하지 않지만 대문자 등을 처리하려는 경우에 대비하여 참조를 제공했습니다. – ZachS

1

질문에 게시 한 아이디어가 맞지만 작성한 실제 코드가 어떻게 그 아이디어를 표현하려고하는지 잘 모르겠습니다. 나는 당신이 위에서 쓴 것과 정확히 같은 부분으로 프로그램을 나눌 것이다. 귀하의 단계를 코드에 주석으로 추가했습니다.

char sz[4]; // I'm assuming we're only going to get 3 characters 
printf("Please enter a-z or an equivalent:\n"); 
scanf("%s", s1); 

// You wrote: 
// 1) Look for '-', if true 
// 2) Look at first char that was input(char a in a-z), find ASCII # 
// 3) Look at last char that was input (char z in a-z), find ASCII # 
// 
// sz[0] is the first char that was input, sz[1] the dash, sz[2] the last char 
// the number of letters you need to print is sz[2] - sz[0] (+1 if you want the. 
// actual letter that appears in after the dash, which you do). 

int numOfLettersToPrint = sz[2] - sz[0] + 1; 

// Your next step is: 
// 
// 4) Print first letter based on ASCII #, then with a loop print the rest, up until the last letter in a-z (in that case being z). 
for (int i = 0; i < numOfLettersToPrint; i++) { 
    // Here, we want to actually print the letter. 
    // sz[0] is the first letter, for example a. We add "i" to it so it goes up by one every time. 
    printf("%c", sz[0] + i); 
} 
+1

입력시 3 자만 입력하려면 "% .3s"를 사용하십시오! –

-1

이것은 거의이 문제에 대한 표준 접근 방식입니다.

#define z 2*(c<d)-1 
int d;int main(int c,char**v){c=v[1][0],d=v[1][2],d+=z;for(;c-d;c+=z)putchar(c);} 
 
$ ./az a-e 
abcde 
$ ./az z-q 
zyxwvutsrq