Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串类到CString转换时出错_C++_Arrays_String_C Strings - Fatal编程技术网

C++ 字符串类到CString转换时出错

C++ 字符串类到CString转换时出错,c++,arrays,string,c-strings,C++,Arrays,String,C Strings,我想把三个字符串变量放在一个数组中,作为CString。这段代码给了我一个声明错误 #include <iostream> #include <string> using namespace std; int main() { string Str1, Str2, Str3; cin >> Str1 >> Str2 >> Str3; int length_Str1 = Str1.size(), length_

我想把三个字符串变量放在一个数组中,作为CString。这段代码给了我一个声明错误

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string Str1, Str2, Str3;
    cin >> Str1 >> Str2 >> Str3;

    int length_Str1 = Str1.size(), length_Str2 = Str2.size(), length_Str3 = Str3.size();
    char aCString[length_Str1+length_Str2+length_Str3+1];

    string Str_Array [] = {Str1, Str2, Str3};
    strcpy(aCString, Str_Array.c_str());

    return 0;
}
错误:

代码中有两个错误:

一,。14:32:错误:请求“str_数组”中的成员“c_str”,该成员属于非类类型“std::string[3]{aka std::basic_string[3]}” 2.14:39:错误:“strcpy”未在此作用域中声明

原因:

第一个错误是因为您试图调用c_str以获取 Str_数组,它是指向字符串数组的指针,正确的方式 是为字符串本身调用它,即Str_数组[someIndexOfArray] 第二个错误背后的原因是程序中不包括包含strcpy方法的string.h。 解决方案:

请尝试以下代码:

#include <iostream>
#include <string>

#include <string.h>     //for strcpy and strcat method

using namespace std;

int main()
{
    string Str1, Str2, Str3;
    cin >> Str1 >> Str2 >> Str3;

    int length_Str1 = Str1.size();
    int length_Str2 = Str2.size();
    int length_Str3 = Str3.size();

    char aCString[length_Str1+length_Str2+length_Str3+1];

    string Str_Array[] = {Str1, Str2, Str3};

    strcpy(aCString, Str_Array[0].c_str()); //copy the first index of array 

    for(int i =1;i<3;i++)   //concatenate each index of array
        strcat(aCString, Str_Array[i].c_str());

    return 0;
}

希望这有帮助。

据我所知,它不应该允许您以尝试的方式初始化长度变量。也请发布错误消息。非常感谢。这里是:谢谢,但是我试过了,有一个问题:aCString中保存的最后一个字符串!但是我想要这样的东西:aCString==Str1,Str2,Str3,三个字符串。我写过,使用for循环将字符串彼此分开,但如果可能的话,我希望更高效。对不起,我忘记将strcpy更改为strcat,基本上您必须复制第一个索引,然后所有其他索引将连接到输出字符串。看看更新后的解决方案,虽然我不是很擅长算法分析,但是在效率方面,在我看来,有两种可能的方法:1-您可以修改上述代码并分别连接字符串,而不是for循环程序需要n次输入和n次连接2-您可以声明输入数组字符串inputStr[3],而不是Str1、Str2、Str3和,输入并使用循环再次连接字符串,它将占用n+n时间,因为我知道这个程序使用C库,但是我必须用纯C++编写它,而不使用C库函数。你怎么看?