当前位置: 首页>>代码示例>>C++>>正文


C++ DFA::isFinalState方法代码示例

本文整理汇总了C++中DFA::isFinalState方法的典型用法代码示例。如果您正苦于以下问题:C++ DFA::isFinalState方法的具体用法?C++ DFA::isFinalState怎么用?C++ DFA::isFinalState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在DFA的用法示例。


在下文中一共展示了DFA::isFinalState方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: unionOfTwoAutomata

void unionOfTwoAutomata(DFA automat1, DFA automat2) {
	int newStartState, newFinalStates[automat1.countOfFinalStates
			+ automat2.countOfFinalStates];
	int maxStateName1 = automat1.maxNameOfState() + 1;
	int maxStateName2 = automat2.maxNameOfState() + 1;
	std::map<int, std::map<char, int> >::iterator i;
	std::map<char, int>::iterator j;

	if (maxStateName2 >= maxStateName1) { // променяме автомат2 и извеждаме пъвро автомат1 след това автомат2
		automat2.changeAllStatesName(maxStateName2);
		newStartState = automat2.maxNameOfState() + 1;
		for (i = automat1.table.begin(); i != automat1.table.end(); i++)
			for (j = i->second.begin(); j != i->second.end(); j++)
				std::cout << "table[" << i->first << "][" << j->first << "]="
						<< j->second << std::endl;

		for (i = automat2.table.begin(); i != automat2.table.end(); i++)
			for (j = i->second.begin(); j != i->second.end(); j++)
				std::cout << "table[" << i->first << "][" << j->first << "]="
						<< j->second << std::endl;
	} else { // променяме автомат1 и извеждаме пъвро автомат2 след това автомат1
		automat1.changeAllStatesName(maxStateName1);
		newStartState = automat1.maxNameOfState() + 1;
		for (i = automat2.table.begin(); i != automat2.table.end(); i++)
			for (j = i->second.begin(); j != i->second.end(); j++)
				std::cout << "table[" << i->first << "][" << j->first << "]="
						<< j->second << std::endl;
		for (i = automat1.table.begin(); i != automat1.table.end(); i++)
			for (j = i->second.begin(); j != i->second.end(); j++)
				std::cout << "table[" << i->first << "][" << j->first << "]="
						<< j->second << std::endl;
	}

	// извеждаме прегодите от новото начално състояния
	for (int i = 0; i < automat1.countOfAlphabet; i++) {
		if (automat1.transitionFunction(automat1.startState,
				automat1.alphabet[i]) != -2) {
			std::cout << "table[" << newStartState << "]["
					<< automat1.alphabet[i] << "]="
					<< automat1.transitionFunction(automat1.startState,
							automat1.alphabet[i]) << std::endl;
		}

		if (automat2.transitionFunction(automat2.startState,
				automat2.alphabet[i]) != -2) {
			std::cout << "table[" << newStartState << "]["
					<< automat2.alphabet[i] << "]="
					<< automat2.transitionFunction(automat2.startState,
							automat2.alphabet[i]) << std::endl;
		}
	}

	int k = 0;
	// вземаме финалните състояния на новия автомат
	for (int i = 0; i < automat1.countOfFinalStates; i++)
		newFinalStates[k++] = automat1.finalStates[i];
	for (int i = 0; i < automat2.countOfFinalStates; i++)
		newFinalStates[k++] = automat2.finalStates[i];
	// ако поне едно от двете начални състояния на двата автомата е финално, правим и началното на новия автомат финално
	if (automat1.isFinalState(automat1.startState)
			|| automat2.isFinalState(automat2.startState)) {
		newFinalStates[k++] = newStartState;
	}
	// извеждаме автомата
	std::cout << "Start state: " << newStartState << std::endl
			<< "Final States: ";
	for (int i = 0; i < k; i++)
		std::cout << newFinalStates[i] << " ";
}
开发者ID:aliench0,项目名称:DFA,代码行数:69,代码来源:DFA.cpp


注:本文中的DFA::isFinalState方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。