2

这确实是一项任务,但我被卡住了,这可能只是我没有得到的措辞。

创建一个具有可变数量参数的函数,该函数在其余参数中搜索作为第一个参数提供的子字符串。此函数将返回一个向量,其中包含包含子字符串的所有参数

这是我到目前为止所拥有的:

#include <iostream>
#include <string>
#include <algorithm>
#include <stdarg.h>
#include <vector>
using namespace std;

vector<string> search(string str, ...);

int main (){
    va_list arguments;
    char contin = 'y';
    string str;

    va_start(arguments, str);
    cout << "Enter a string that will be searched for in the rest of the strings: ";
    str += va_arg(arguments, str);
    while(contin == 'y'){
        cout << "Enter a string that will be searched in: ";
        str += va_arg(arguments, str);
        cout << endl << "Enter \''y\'' to continue or \''n\'' to end to start seach:" << endl;
        cin >> contin;
    }
    va_end(arguments);
    search(arguments);
  return 0;
}

vector<string> search(string str, ... ){
    va_list containing;
    va_start (containing, str);
    if (std::find(str.begin(), str.end(), str.front()) != str.end()){
        str += va_arg(containing, str);
    }

    return containing;
}

我收到这些错误:第 37 行:“str += va_arg(containing, str);” -error C2059:语法错误:')'

第 40 行:“返回包含;” - 错误 C2664: 'std::vector<_Ty>::vector(const std::vector<_Ty> &)' : 无法将参数 1 从 'va_list' 转换为 'const std::vector<_Ty> &'

第 36 行:“if (std::find(str.begin(), str.end(), str.front()) != str.end()){” - 错误 C2039: 'front' : is not a 'std::basic_string<_Elem,_Traits,_Ax>' 的成员

第 21/24 行:“str += va_arg(arguments, str);” - 错误 C2059:语法错误:')'

另外,我是在朝着正确的方向前进还是在做完全错误的事情?

4

1 回答 1

1

对于带有变量 args 的函数,肯定有一些你不理解的事情。

首先要调用带有变量 args 的函数,您只需使用普通方法

search("here", "are", "some", "strings");

其次,因为变量 arg 函数的参数类型是未知的,所以您在调用函数时会受到严重限制。任何复杂的对象都是std::string被禁止的。和int等简单类型都可以。doublechar *

第三,va_arg宏的第二个参数是您希望访问的值的类型,例如va_arg(containing, char*)

我只能认为您分配中的“字符串”是指老式的 C 类型,即const char *不是std::string

于 2013-10-10T22:20:24.920 回答