【发布时间】:2021-02-22 16:05:21
【问题描述】:
我正在尝试编写一个在最后一次出现 2 个冒号“::”之后打印所有内容的应用程序,因此如果它是 3 个“:::”,则不会计算在内。如果字符串是“He::ll::o”,它应该打印出“o”,如果它是“12312::233”,它应该打印出“233”,我必须使用char* extract(char* input);和一个指针函数@987654322 @我今天刚开始学习C,有点不知所措。我也不允许导入库。这就是我到目前为止所拥有的。任何帮助表示赞赏。
int isCH(char c) {
return (c != ':' && c != '\0');
}
char *extract(char *input){
int state = 1;
char *doubleColon;
while(1){
switch(state){
case 1:
if(isCH(*input))
state = 1;
if(*input == '\0')
state = 2;
if(*input == ':') // first colon
state = 3;
break;
case 2:
return doubleColon;
break;
case 3:
if(isCH(*input))
state = 1;
if(*input == '\0')
state = 2;
if(*input == ':'){ // second colon
state = 4;
doubleColon = input;
}
break;
case 4:
if(isCH(*input))
state = 1;
if(*input == '\0')
state = 2;
if(*input == ':')
state = 1;
break;
}
input++;
}
}
int main() {
printf("End of String: %c", *extract("Ha::ll::o"));
}
【问题讨论】:
-
extract不是returning 任何东西,您的printf调用应使用%s格式说明符。 -
只是一个样式说明,如果您为您的州创建一个枚举,这样它们会有一个名称而不是数字,它会看起来更好。
标签: c while-loop count switch-statement printf