如何更改此空隙函数,以便在特殊条件下返回一个生成的字符串



我需要在指定的长度中生成给定的char变量的所有可能组合,然后返回与我的标准匹配的char。

因此,通过搜索,我找到了以下解决方案:

#include <bits/stdc++.h> 
void printAllCombinations(char set[], std::string prefix, int sizeofSet, int k) { 
   if (k == 0) { 
       std::cout << (prefix) << std::endl; 
       /*
            If(prefix is matched) {
                 return prefix;
            }
      */ 
       return;   
   } 
   for (int i = 0; i < sizeofSet; i++) { 
       std::string newPrefix; 
       newPrefix = prefix + set[i]; 
       printAllCombinations(set, newPrefix, sizeofSet, k - 1); 
   } 
} 
int main() {             
    char mySet[] = {'a', 'b'}; 
    int lengthOfGeneratedStrings = 2; 
    printAllCombinations(mySet, "", sizeof(mySet), lengthOfGeneratedStrings); 
}

现在,我需要更改此void函数,以便我可以返回代码注释部分中指向的合格字符串(前缀(。

很容易做到这一点:

#include <iostream>
#include <string>
std::string returnString(const std::string &input) {
  std::string tmp{input};
  if (tmp == std::string("ghasem")) {
    return tmp;
  } else {
    return std::string("NULL");
  }
}
int main(void) {
  std::cout << returnString("ghasem") << std::endl;
  std::cout << returnString("Another")<< std::endl;
  return 0;
}
$> g++ -o output -std=c++17 main.cpp
$> ./output
ghasem
NULL
$>

您想要的是std::ostringstream。使用它#include <sstream>。输入完全像std::cout,因此您只需要更改几行。

您不应该#include <bits/stdc++.h>>在这里为什么>


#include <string>
#include <iostream>
#include <sstream>
std::string getAllCombinations(char set[], std::string prefix, int sizeofSet, int k) {
    std::ostringstream stream;
    if (k == 0) {
        stream << (prefix) << 'n';
        return stream.str();
    }
    for (int i = 0; i < sizeofSet; i++) {
        std::string newPrefix;
        newPrefix = prefix + set[i];
        stream << getAllCombinations(set, newPrefix, sizeofSet, k - 1);
    }
    return stream.str();
}
int main() {
    char mySet[] = { 'a', 'b' };
    int lengthOfGeneratedStrings = 2;
    std::cout << getAllCombinations(mySet, "", sizeof(mySet), lengthOfGeneratedStrings);
}

如您所见,std::ostringstream被声明,然后用operator<<填充。要获得生成的std::string,请使用.str()

另外,不要写<< std::endl;-尤其是在递归功能中。>在此为什么>

最新更新