我希望能够让用户输入 a-z 或 c-z 或 c-p 或其他任何内容,并让它返回这两者之间的实际字母。我想我必须使用 ASCII 编号,这样我才能使用这些步骤:
如果为真,则寻找“-”
查看输入的第一个字符(char a in a-z),找到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;
}
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,这样您就可以很好地掌握这些内容。
我是一名优秀的程序员,十分优秀!