如何在c ++中订购字符串[]

Ete*_*ner 2 c++ string

输入是string [],如下所示.

"CSE111:CSE110 MATH101"

"CSE110:"

我需要根据一些逻辑来排序字符串.例如,我的输出应该是string[]类似的

"CSE110", "MATH122", "CSE111"

我的问题是

  1. 在扫描输入数组时,如果选择一个字符串作为输出数组的第一个字符串,那么如何跳过所有出现的特定字符串,同时继续处理string[]第二个输出字符串等.

例如:

输入:

"CSE111:CSE110 MATH101"

"CSE110:"

如果选择CSE110作为输出中的第一个字符串,那么当我通过输入字符串[]扫描第二个字符串作为输出的一部分时,我不应该考虑CSE110.

我怎样才能做到这一点?我期待的答案是这样的:

  1. 将输入存储在字符串[]中
  2. 使用strtok或stringstream >> operator逐个循环遍历字符串.
  3. 一旦找到第一个字符串......等等等等......

希望我的问题很清楚.我很乐意提供更多细节.

编辑1:更多解释

字符串表示类需要采用的顺序.如果一个班级具有先决条件,则必须首先采取先决条件.即.如果输入是

"CSE111: CSE110 MATH101"
"CSE110:"
Run Code Online (Sandbox Code Playgroud)

CSE111类具有CSE110 MATH101的先决条件.所以我需要考虑第一个CSE1110(无先决条件) - MATH101((无先决条件),然后是CSE111.(进一步的关系可以按字母顺序排除.)我希望这有助于..

Geo*_*che 6

我希望得到它现在:对于具有以下形式的字符串A: B C D,过程中AB,CD作为其先决条件.

在这种情况下,您需要从课程到其先决条件的映射,例如:

typedef std::set<std::string> CourseSet;
typedef std::map<std::string, CourseSet> Prerequisites;
Run Code Online (Sandbox Code Playgroud)

现在,您可以Prerequisites使用第一部分作为键并使用CourseSet值作为标记来填充.

由于您似乎只想要输入中所有课程的可能订单之一,您可以执行以下操作:

  • 完成课程的先决条件(即包括他们间接依赖的课程)
  • 现在a>b如果ab先决条件
  • 如果b没有a作为先决条件使用,例如词典顺序