gpt4 book ai didi

c - 在 C 中标记字符串?

转载 作者:太空狗 更新时间:2023-10-29 16:09:33 26 4
gpt4 key购买 nike

我正在为用 C 编写的计算器开发终端解析器。我不知道如何连接运算符之间的所有数字以将它们放入数组中。

例如,如果输入(命令行参数)是“4+342”,理想情况下是 input[] = {"4", "+", "342"} .

到目前为止,这是我的代码。我包括 <stdio.h> , <stdlib.h> , 和 <ctype.h> .

typedef char * string;

int main(int argc, char *argv[])
{
string inputS = argv[1];
string input[10];
string temp;
printf("%s\n", inputS);
int i;
int len = strlen(inputS);
printf("parsed:\n");
for(i = 0; i < len; inputS++, i++)
{
if(isdigit(*inputS))
{
printf("%c",*inputS);
}
else
{
printf("\n%c\n",*inputS);
}
}
printf("\n");
return 0;
}

如果使用 ./calc 4+5-546 运行,它会输出:

4
+
5
-
546

那么将每一行放入其自己的数组槽中的最简单方法是什么?

最佳答案

试试这个尺寸...

#include <stdio.h>
#include <ctype.h>

typedef char * string;

int main(int argc, char *argv[])
{
string inputS = argv[1];
string input[50]; /* Up to 50 tokens */
char buffer[200];
int i;
int strnum = 0;
char *next = buffer;
char c;

if (argc != 2)
{
fprintf(stderr, "Usage: %s expression\n", argv[0]);
return 1;
}

printf("input: <<%s>>\n", inputS);
printf("parsing:\n");

while ((c = *inputS++) != '\0')
{
input[strnum++] = next;
if (isdigit(c))
{
printf("Digit: %c\n", c);
*next++ = c;
while (isdigit(*inputS))
{
c = *inputS++;
printf("Digit: %c\n", c);
*next++ = c;
}
*next++ = '\0';
}
else
{
printf("Non-digit: %c\n", c);
*next++ = c;
*next++ = '\0';
}
}

printf("parsed:\n");
for (i = 0; i < strnum; i++)
{
printf("%d: <<%s>>\n", i, input[i]);
}

return 0;
}

给定程序名为 tokenizer 和命令:

tokenizer '(3+2)*564/((3+4)*2)'

它给了我输出:

input: <<(3+2)*564/((3+4)*2)>>
parsing:
Non-digit: (
Digit: 3
Non-digit: +
Digit: 2
Non-digit: )
Non-digit: *
Digit: 5
Digit: 6
Digit: 4
Non-digit: /
Non-digit: (
Non-digit: (
Digit: 3
Non-digit: +
Digit: 4
Non-digit: )
Non-digit: *
Digit: 2
Non-digit: )
parsed:
0: <<(>>
1: <<3>>
2: <<+>>
3: <<2>>
4: <<)>>
5: <<*>>
6: <<564>>
7: <</>>
8: <<(>>
9: <<(>>
10: <<3>>
11: <<+>>
12: <<4>>
13: <<)>>
14: <<*>>
15: <<2>>
16: <<)>>

关于c - 在 C 中标记字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4547570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com