#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MAXSIZE 101 using namespace std; void cal(int sum,int j) { int i,k; int a[11]= {0}; int flag=0; while(sum/2) { a[flag]=sum%2; flag++; sum/=2; } a[flag]=sum; flag++; for(i=j-1; i>=0; i--) { printf("%d",a[i]); if(i!=0) printf(" "); } printf("\n"); } int main() { char str[MAXSIZE]; int i,j; while(cin>>(str)) { int a[26]= {0}; j=0; for(i=0; str[i]!='\0'; i++) { if(str[i]>='a'&&str[i]<='z') { int b=str[i]; if(a[b-97]==0) { a[b-97]=1; j++; } printf("%c",str[i]); if(str[i+1]!='\0') printf(" "); } if(str[i]=='-') { printf("%c%c",str[i],str[i+1]); i++; if(str[i]!='\0') printf(" "); } else if(str[i]=='<') { printf("%c%c%c",str[i],str[i+1],str[i+2]); i+=2; if(str[i]!='\0') printf(" "); } else if(str[i]=='|') { printf("%c%c",str[i],str[i+1]); i++; if(str[i]!='\0') printf(" "); } else if(str[i]=='^'||str[i]=='!'||str[i]=='('||str[i]==')') { printf("%c",str[i]); if(str[i+1]!='\0') printf(" "); } } printf("\n"); int n=0; for(i=0; i<=25; i++) { if(a[i]==1&&n+1<j) { printf("%c ",i+97); n++; } else if(a[i]==1&&n==j-1) { printf("%c",i+97); } } printf("\n"); int sum=pow(2,j)-1; while(sum>=0) { cal(sum,j); sum--; } } return 0; }具体分析基本原理与设计步骤
时间: 2024-03-07 11:54:05 浏览: 279
#include"iostream.h"
3星 · 编辑精心推荐
这份代码的基本原理和设计步骤与之前介绍的相同,不过这里使用了 C++ 的语法和库函数实现。具体来说:
1. 首先通过一个 while 循环对每个逻辑表达式进行处理,处理过程中通过 cin 读入字符串,并将其存入一个字符数组中;
2. 在处理每个表达式时,用一个 bool 类型的数组记录其中出现的逻辑变量,并按字母序输出;
3. 对于每个逻辑变量,输出其所有取值组合。这里使用了一个二进制转换的方法,将从 0 到 2^j-1 的所有数字转换为二进制,并输出。
需要注意的是,这份代码中使用了 C++ 标准库的 string 类型和 stringstream 类型,这些类型可以方便地进行字符串的操作和转换,可以简化代码实现过程。
以下是这份代码的实现细节:
阅读全文