输入一个逻辑表达式,统计运算符(假设表达式中仅使用了关系运算符、逻弄运算符)分隔开的运算数的数量

输入一个逻辑表达式,统计运算符(假设表达式中仅使用了关系运算符、逻弄运算符)分隔开的运算数的数量

了解一下编译原理 词法分析 有限状态自动机

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7662440
  • 这篇博客也不错, 你可以看下为什么字符串常量赋值给指针和数组后,指针不可以修改字符串,而数组可以
  • 除此之外, 这篇博客: 图之邻接矩阵(存储结构、图的遍历、最小生成树、关键路径、最短路径)中的 邻接矩阵的方式构造图(无向图为例) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • //邻接矩阵构造无向图
    int LocateVex(MGraph G, ElemType v)
    {//寻找顶点的位置下标
    	int i;
    	for(i = 0; i<G.vexnum; i++)
    	{
    		if(v == G.vexs[i])
    			return i;		
    	}
    	return -1; //没有找到该顶点返回-1 
    }
    void Create_UDN(MGraph &G)
    {
    	int i, j;
    	ElemType v1, v2;
    	int a1, a2;
    	scanf("%d %d", &G.vexnum, &G.arcnum);//输入顶点数和边数
    	//读入顶点信息
    	for(i = 0;i<G.vexnum; i++) //输入顶点 
    		scanf("%d", &G.vexs[i]);
    	//初始化邻接矩阵
    	for(i = 0; i<G.vexnum; i++)
    	{
    		for(j = 0; j<G.vexnum; j++)
    		{
    			G.arcs[i][j] = 0; //邻接矩阵值为零表示两顶点无关
    		}
    	}
    	//读入弧的信息 
    	for(i = 0; i<G.arcnum; i++)
    	{
    		scanf("%d %d", &v1, &v2);
    		a1 = LocateVex(G, v1);
    		a2 = LocateVex(G, v2);
    		G.arcs[a1][a2] = G.arcs[a2][a1] = 1;
    		//对于有向图只用令 G.arcs[a1][a2] = 1
    	}
    }
    
  • 您还可以看一下 陈虎老师的一小时快速学习屏幕录像和视频编辑实战教程课程中的 转场特效、马赛克效果、绿幕抠像小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:统计逻辑表达式中分隔开的运算数数量。

    解决方案:可以采用遍历表达式的方式,统计运算数的数量。具体步骤如下:

    1.定义一个变量来记录运算数的数量,初始值为0。

    2.遍历逻辑表达式中的每一个字符。

    3.如果当前字符为运算符,则运算数数量+1。

    4.如果当前字符为括号(左括号或右括号),则跳过。

    5.输出运算数数量。

    代码实现如下:

    #include <stdio.h>
    #include <string.h>
    
    int countOperands(char* expr) {
        int count = 0;
        int len = strlen(expr);
        for(int i=0; i<len; i++) {
            if(expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/' || expr[i] == '>' || expr[i] == '<' || expr[i] == '=') {
                count++;
            } else if(expr[i] == '(' || expr[i] == ')') {
                continue;
            }
        }
        return count;
    }
    
    int main() {
        char* expr = "a+b>c-d";
        int count = countOperands(expr);
        printf("运算数数量为%d\n", count);
        return 0;
    }