是否可以根据 argv[0] 编写功能不同的 C 程序?
Is it possible to write a C program that functions differently according to argv[0]?
是否可以根据 argv[0]
编写功能不同的 C 程序?
事实上,我正在做 C 教科书中的练习。练习是编写一个程序,将大写字母转换为小写字母或将小写字母转换为大写字母,具体取决于调用它的名称,如 argv[0]
.
中所示
[编辑] 仅供参考,练习来自 K&R 的教科书
Is it possible to write a C program that functions differently according to argv[0]?
是的,这是可能的,非常简单。例如:
if (0 == strcmp(argv[0], "say_hello")) {
printf("hello\n");
} else if (0 == strcmp(argv[0], "say_bye")) {
printf("bye\n");
}
嗯,你可以简单地根据程序名称选择使用什么功能
#include <string.h>
#include <ctype.h>
int main(int ac, char **av)
{
if (strcmp(av[0], "upper") == 0)
do something;
else if (strcmp(av[0] "lower") == 0)
do something;
return (0);
}
是的,绝对有可能。为了在本练习中正确管理 char
值,我建议使用 ASCII
表,您可以查看 here
想法是:
我们知道大写字母从十进制值 65 开始,到值 90 结束。
小写字母从 97 开始到值 122 结束。
现在,如果我们有,例如,十进制值为 68 的字母 D
,为了使其变为小写,我们只需添加 32,就变成 68 + 32 = 100,即小写字母 'd'
.
的精确值
如果我们有小写字母j
,类似的事情是106。我们减去32得到74,这就是大写字母'J
的精确值。
这两个函数使用前面的方法分别将小写字母转换为大写字母,反之亦然。
void toLower(char *string){
//For any letter in *string
for(int i = 0; i < strlen(string); i++){
//If letter at index I is really uppercase
if(string[i] >= 65 && string[i] <= 90)
//it becomes lowercase by adding 32 to its ASCII value
string[i] += 32;
}
}
void toUpper(char *string){
//For any letter in *string
for(int i = 0; i < strlen(string); i++)
//If letter at index I is really Lowercase
if(string[i] >= 97 && string[i] <= 122)
//it becomes Uppercase by adding 32 to its ASCII value
string[i] -= 32;
}
现在的主要功能:
int main(int argc, char *argv[]){
//Taking program name from argv[0]
char *upperOrLower = argv[0];
//Adding 2 to Program Name in order to remove characters '.' and '/' from String
upperOrLower += 2;
//Retrieving String given as argument
char *string = argv[1];
//If Program Name is lower
if(strcmp(upperOrLower, "lower") == 0){
//We have Uppercase string, so we use toLower function
printf("String before calling toLower: %s\n", argv[1]);
toLower(string);
printf("String after calling toLower: %s\n", string);
}
//Else if we have upper as program name
else if(strcmp(upperOrLower, "upper") == 0){
//We have Lowercase string, so we use toUpper function
printf("String before calling toUpper: %s\n", string);
toUpper(string);
printf("String after calling toUpper: %s\n", string);
}
}
现在将上面的程序编译为:
gcc program.c -o upper
并通过键入以下命令执行它:
./upper hello
输出应该是:
String before calling toUpper: hello
String after calling toUpper: HELLO
反过来,如果我们通过键入编译它:
gcc program.c -o lower
然后我们通过键入以下内容来执行它:./lower HELLO
我们应该得到输出:
String before calling toLower: HELLO
String after calling toLower: hello
您可能想要添加对 argc
值的检查,它会告诉我们您为程序提供了多少参数,否则如果参数不足,您可能会出错。
这应该是您的练习所要求的全部内容。
希望我已经说清楚了。
是否可以根据 argv[0]
编写功能不同的 C 程序?
事实上,我正在做 C 教科书中的练习。练习是编写一个程序,将大写字母转换为小写字母或将小写字母转换为大写字母,具体取决于调用它的名称,如 argv[0]
.
[编辑] 仅供参考,练习来自 K&R 的教科书
Is it possible to write a C program that functions differently according to argv[0]?
是的,这是可能的,非常简单。例如:
if (0 == strcmp(argv[0], "say_hello")) {
printf("hello\n");
} else if (0 == strcmp(argv[0], "say_bye")) {
printf("bye\n");
}
嗯,你可以简单地根据程序名称选择使用什么功能
#include <string.h>
#include <ctype.h>
int main(int ac, char **av)
{
if (strcmp(av[0], "upper") == 0)
do something;
else if (strcmp(av[0] "lower") == 0)
do something;
return (0);
}
是的,绝对有可能。为了在本练习中正确管理 char
值,我建议使用 ASCII
表,您可以查看 here
想法是: 我们知道大写字母从十进制值 65 开始,到值 90 结束。 小写字母从 97 开始到值 122 结束。
现在,如果我们有,例如,十进制值为 68 的字母 D
,为了使其变为小写,我们只需添加 32,就变成 68 + 32 = 100,即小写字母 'd'
.
如果我们有小写字母j
,类似的事情是106。我们减去32得到74,这就是大写字母'J
的精确值。
这两个函数使用前面的方法分别将小写字母转换为大写字母,反之亦然。
void toLower(char *string){
//For any letter in *string
for(int i = 0; i < strlen(string); i++){
//If letter at index I is really uppercase
if(string[i] >= 65 && string[i] <= 90)
//it becomes lowercase by adding 32 to its ASCII value
string[i] += 32;
}
}
void toUpper(char *string){
//For any letter in *string
for(int i = 0; i < strlen(string); i++)
//If letter at index I is really Lowercase
if(string[i] >= 97 && string[i] <= 122)
//it becomes Uppercase by adding 32 to its ASCII value
string[i] -= 32;
}
现在的主要功能:
int main(int argc, char *argv[]){
//Taking program name from argv[0]
char *upperOrLower = argv[0];
//Adding 2 to Program Name in order to remove characters '.' and '/' from String
upperOrLower += 2;
//Retrieving String given as argument
char *string = argv[1];
//If Program Name is lower
if(strcmp(upperOrLower, "lower") == 0){
//We have Uppercase string, so we use toLower function
printf("String before calling toLower: %s\n", argv[1]);
toLower(string);
printf("String after calling toLower: %s\n", string);
}
//Else if we have upper as program name
else if(strcmp(upperOrLower, "upper") == 0){
//We have Lowercase string, so we use toUpper function
printf("String before calling toUpper: %s\n", string);
toUpper(string);
printf("String after calling toUpper: %s\n", string);
}
}
现在将上面的程序编译为:
gcc program.c -o upper
并通过键入以下命令执行它:
./upper hello
输出应该是:
String before calling toUpper: hello
String after calling toUpper: HELLO
反过来,如果我们通过键入编译它:
gcc program.c -o lower
然后我们通过键入以下内容来执行它:./lower HELLO
我们应该得到输出:
String before calling toLower: HELLO
String after calling toLower: hello
您可能想要添加对 argc
值的检查,它会告诉我们您为程序提供了多少参数,否则如果参数不足,您可能会出错。
这应该是您的练习所要求的全部内容。
希望我已经说清楚了。