转换a-z打印出abcdef .... z?

时间:2009-10-01 23:32:02

标签: c ascii

我希望能够输入用户输入a-z或c-z或c-p等等,并让它返回这两者之间的实际字母。我想我必须使用ASCII编号,所以我可以使用这些步骤:

  1. 寻找' - ',如果是真的

  2. 查看输入的第一个字符(a-z中的char a),找到ASCII#

  3. 查看输入的最后一个字符(a-z中的字符z),找到ASCII#

  4. 打印基于ASCII#的第一个字母,然后用循环打印其余部分,直到a-z中的最后一个字母(在这种情况下为z)。

  5. 到目前为止,这是我的代码,但我认为它已经过时了。我不太了解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;
    }
    

4 个答案:

答案 0 :(得分: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';

我还建议你阅读好的C书的前几章,比如K和R,这样你就可以很好地掌握这些东西了。

答案 1 :(得分:1)

首先,您可以找到table of ASCII character codes here.手中有这些代码,操作应该变得相对简单。它将沿着这些行(以伪代码形式):

take_input_from_user();
parse_the_input();

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

    our_character = i;
    print_out(our_character);
}

有关C,IIRC的更多细节,您无法传递这样的数组:function_name(int[] a)。 IIRC,它必须像function_name(int* a )那样你可以尊重指针并做有趣的事情。

答案 2 :(得分: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);
}

答案 3 :(得分:-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