如何更改此void函数,使其在特殊条件下返回生成的字符串之一?

时间:2019-05-24 12:18:46

标签: c++

我需要生成给定长度的给定char变量的所有可能组合,然后返回与我的条件匹配的一个。

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

char line[some_len];

wp = fopen(some_file_name, "r");
if(wp)
{
    while(fgets(line, some_len, wp))
    {
        // use line.  In this case, just print to stdout
        printf("%s\n", line);
    }
    fclose(wp);
}

现在,我需要更改此void函数,以便可以返回代码注释部分所指出的限定字符串(前缀)。

2 个答案:

答案 0 :(得分:0)

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

您不应该#include <bits/stdc++.h> > here why >


#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;-尤其是在递归函数中。 > here why >

答案 1 :(得分:0)

您可以轻松地做到这一点:

#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
$>