我希望能够输入用户输入a-z或c-z或c-p等等,并让它返回这两者之间的实际字母。我想我必须使用ASCII编号,所以我可以使用这些步骤:
寻找' - ',如果是真的
查看输入的第一个字符(a-z中的char a),找到ASCII#
查看输入的最后一个字符(a-z中的字符z),找到ASCII#
打印基于ASCII#的第一个字母,然后用循环打印其余部分,直到a-z中的最后一个字母(在这种情况下为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 :(得分: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