【问题标题】:Error in String class to CString ConversionString 类到 CString 转换中的错误
【发布时间】:2015-08-03 06:33:12
【问题描述】:

我想将三个字符串变量作为 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;
}

【问题讨论】:

  • 据我所知,它不应该允许您以您尝试的方式初始化 length 变量。请同时发布错误消息。
  • 非常感谢。这是这里:cpp.sh/2ua2

标签: c++ arrays string c-strings


【解决方案1】:

错误:

代码中有两个错误:

1. 14:32: error: request for member 'c_str' in 'Str_Array', which is of non-class type 'std::string [3] {aka std::basic_string<char> [3]}' 2. 14:39: error: 'strcpy' was not declared in this scope

原因:

  • 第一个错误是因为您试图调用c_str Str_Array 是指向字符串数组的指针,正确的方式 是为一个字符串本身调用它,即Str_Array[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,三个字符串彼此相邻。 cpp.sh/2qza
  • 我写过使用 for 循环将字符串放在一起,但如果可能的话,我希望更高效。
  • 对不起,我忘了把strcpy改成strcat,基本上你必须复制第一个索引,然后所有其他索引将连接到输出字符串。查看更新的解决方案。
  • 虽然我不是很擅长Algorithms Analysis但是关于效率,我想到了两种可能的方法: 1 - 你可以修改上面的代码并单独连接字符串而不是for循环(程序需要 n 时间用于输入,n 时间用于连接)2 - 您可以声明一个输入数组 string inputStr[3] 而不是 Str1,Str2,Str3 并且,输入然后使用循环连接字符串(同样需要 n + n 时间)
  • 据我所知,这个程序使用 C 库,但我必须用纯 C++ 编写它,而不使用 C 库中的函数。你怎么看?
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2014-01-30
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多