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

#define MAX_PARAM_NUM 10

char* get_param_types(char* prototype);

int main() { char* prototype1 = "int foo(char*, int)"; char* prototype2 = "void bar(int*, float, double)"; char* prototype3 = "int baz(int ()(int), int)"; char* prototype4 = "float qux(char*, int, float()(int, double))";

char* param_types1[MAX_PARAM_NUM];
char* param_types2[MAX_PARAM_NUM];
char* param_types3[MAX_PARAM_NUM];
char* param_types4[MAX_PARAM_NUM];

get_param_types(prototype1, param_types1);
get_param_types(prototype2, param_types2);
get_param_types(prototype3, param_types3);
get_param_types(prototype4, param_types4);

printf("prototype1: %s\n", prototype1);
printf("param_types1: ");
for(int i=0; i<2; i++)
    printf("%s ", param_types1[i]);
printf("\n");

printf("prototype2: %s\n", prototype2);
printf("param_types2: ");
for(int i=0; i<3; i++)
    printf("%s ", param_types2[i]);
printf("\n");

printf("prototype3: %s\n", prototype3);
printf("param_types3: ");
for(int i=0; i<2; i++)
    printf("%s ", param_types3[i]);
printf("\n");

printf("prototype4: %s\n", prototype4);
printf("param_types4: ");
for(int i=0; i<3; i++)
    printf("%s ", param_types4[i]);
printf("\n");

return 0;

}

char* get_param_types(char* prototype, char** param_types) { int param_num = 0; char* token = strtok(prototype, " (),"); while(token != NULL) { if(strcmp(token, "function") == 0) param_types[param_num] = "function"; else if(strcmp(token, "pointer") == 0) param_types[param_num] = "pointer"; else if(strchr(token, '(') != NULL) param_types[param_num] = "function"; else if(strchr(token, '') != NULL) param_types[param_num] = "pointer"; else param_types[param_num] = token;

    param_num++;
    token = strtok(NULL, " (),*");
}

return param_types;
编写一段C语言代码从输入的描述C语言函数原型的字符串中获取函数的参数类型其中如果参数为函数标记参数类型为function如果是指针标记为pointer;需通过以下测试用例:assert get_param_typesint foochar int == pointer intassert get_param_typesvoid barint float double == pointer floa

原文地址: https://www.cveoy.top/t/topic/dbpT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录