我要做的是创建一个模板数组类,它将数据类型的值存储到数组中。我使用int值可以正常工作,但是使用字符串对象时,事情就会开始崩溃。
我已经取出了代码块并自行尝试了,我确实得到了同样的错误。我确信我已经学到了这一点,而且我几乎是肯定的,答案很简单,试图围绕我们学习c ++的速度,我有时会有点疯狂!
我现在最好的猜测是,我需要对字符串进行标记并寻找空格。我倾向于过度思考导致更多混乱的事情 - 因此我在这里寻求答案!
代码:
// Test String: Hello World this is a String Object
int stringSize = 7;
int count = 0;
string s[stringSize];
cout << "\nEnter " << stringSize << " one-word string values:\n";
while (count < stringSize) {
string tmpVal;
cin >> tmpVal;
s[count] = tmpVal;
count ++;
}
答案 0 :(得分:1)
我对你正在寻找什么感到困惑,但我建议你查看标准库。
也许是这样的:
list<string> s;
然后,在循环中使用push_back。
答案 1 :(得分:1)
string s[stringSize];
是非法的,因为stringSize不是常量。您必须使用动态内存(即string* s = new string [stringSize];
),包括stringsize作为模板参数(不要这样做,它实际上没有解决问题),使用固定大小的值,或使用现有结构(我建议vector
,就像比尔的回答一样)。下面的代码在我的编译器上工作正常:
int main(int argc, char *argv[]) {
int stringSize = 7;
int count = 0;
string* s = new string [stringSize];
cout << "\nEnter " << stringSize << " one-word string values:\n";
while (count < stringSize) {
string tmpVal;
cin >> tmpVal;
s[count] = tmpVal;
count ++;
}
delete[] s;
}
答案 2 :(得分:0)
为什么不读取整行,然后找到所有空格并使用substr方法,拆分字符串?
您需要以下方法: getline() find_first_of() substr()
此外,搜索此网站以在c ++中拆分字符串会给你很多提示。
答案 3 :(得分:0)
首先,数组的大小应该是常量:
const int stringSize = 7;
其次,正如dbrien所说,你应该使用std :: vector,除非你这样做是为了学习经验:
std::string tmpVal;
std::vector<std::string> s;
cout << "\nEnter " << stringSize << " one-word string values:\n";
while (cin >> tmpVal)
{
s.push_back(tmpVal);
}
答案 4 :(得分:0)
首先,数组维度必须是常量,因此它应该是const int stringsize = 7;另外,我建议使用std :: vector而不是std :: list,另外还有什么错误?
答案 5 :(得分:0)
不确定你得到了什么错误,但这是错误的,因为你需要使用常量整数值来在堆栈上分配数组。更改:
int stringSize = 7;
int count = 0;
string s[stringSize];
......来:
const int stringSize = 7;
int count = 0;
string s[stringSize];
你可以也可能也应该使用向量而不是使用C风格的数组,或尝试手动滚动你自己的模板化数组类:
vector<string> s;
const int stringSize = 7;
cout << "\nEnter " << stringSize << " one-word string values:\n";
while (s.size() < stringSize) {
string tmpVal;
cin >> tmpVal;
s.push_back(tmpVal);
}
答案 6 :(得分:0)
我也很困惑你的实际问题是什么,因为你的代码有效。但是,FWIW,我建议如下。更改是:(1)使用const(已经由其他人建议),(2)使用size_t,(3)将变量名称stringSize更改为numStrings(因为这个我乍看之下很困惑),以及(4)避免字符串复制。
#include <iostream>
#include <string>
using namespace std;
int main()
{
const size_t numStrings = 7;
size_t count = 0;
string s[ numStrings ];
cout << "\nEnter " << numStrings << " one-word string values:\n";
while (count < numStrings) {
cin >> s[ count ];
count++;
}
return 0;
}
答案 7 :(得分:-2)
事实证明这是编译器。我正在使用xCode并获取:
cin_cout(7307) malloc: *** error for object 0x1000072c0: pointer being freed was not allocated
***在malloc_error_break中设置断点以进行调试
在Visual c + +中运行相同的块似乎没问题...对不起我的愚蠢并感谢所有快速反馈!