需要帮助拆分传递给C ++函数的字符串

时间:2017-08-28 23:37:47

标签: c++

我正在研究一些代码,但无法完成此任务。目标是获取通过函数传递的字符串。 示例功能:

void function(string line1, string line2, string line3)

将从main函数输入一个字符串,它将被传递到第一个参数“line1”。此函数的作用是“将字符串拆分为最接近的空白字符,并将字符串的第一部分放在第2行,其余部分放在第3行。

例如,如果传递给line1的字符串是:

"Good Job"

我必须编写一些代码来分割这个字符串并将每个部分分配给第2行和第3行,这样line2 = Good和line3 = Job。

2 个答案:

答案 0 :(得分:3)

使用std::stringstream。修改您的函数以通过引用接受最后两个参数:

#include <iostream>
#include <string>
#include <sstream>
void function(const std::string& line1, std::string& line2, std::string& line3){
    std::stringstream ss(line1);
    ss >> line2 >> line3; // the space character acts as a delimiter
}
int main(){
    std::string s2, s3;
    function("Good Job", s2, s3);
    std::cout << s2 << ' ' << s3;
}

答案 1 :(得分:2)

Ron使用std::stringstream给出了一个很好的解决方案,这是使用findsubstr

的替代解决方案
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

void function(string line1, string& line2, string& line3)
{
  std::size_t found = line1.find(" ");
  if (found!=std::string::npos){
      line2 = line1.substr(0,found);
      line3 = line1.substr(found+1);
  }
}

int main() {
  string line1 = "Good Day";
  string line2, line3;
  function(line1, line2, line3);
  cout <<line1<<endl;
  cout <<line2<<endl;
  cout <<line3<<endl;
  return 0;
}

输出: -

Good Day
Good
Day