首先,这是一个“功课”问题,因此矢量库和字符串库是不受限制的。我正试图了解c ++的基础知识。
我对此代码的意图是制作和使用字符串数组的数组。换句话说,一个单词列表。
当我运行此代码时,我得到了一堆废话。
如果有更好的方法来制作c ++中的单词列表,我很乐意听到它。
const int cart_length = 50;
const int word_length = 50;
int main()
{
char cart_of_names[cart_length][word_length];
float cart_of_costs[cart_length];
char name[word_length];
cout << "enter the name of the first item: ";
cin >> name;
for(int i=0; i<word_length; i++)
{
cart_of_names[0][i] = name[i];
}
cout << endl;
cout << "that is: ";
for(int x=0; x<word_length; x++)
{
cout << cart_of_names[0][x];
}
cout << endl;
return 0;
}
答案 0 :(得分:4)
如果输入的字符串长度不是50个字符(cart_length
),则名称中少于50个字符有效。你的第二个循环应该有一个if(cart_of_names[0][x]==0) break;
。
答案 1 :(得分:2)
我并不完全明白你在寻找什么。以下代码将帮助您阅读和打印50个单词的列表。希望这会对你有所帮助。
const int cart_length = 50;
const int word_length = 50;
int main()
{
char cart_of_names[cart_length][word_length];
float cart_of_costs[cart_length];
for(int i=0; i<cart_length; i++)
{
cout << "enter the name of the " << i + 1 << "th item: ";
cin >> cart_of_names[i];
}
cout << "that is: ";
for(int x=0; x < cart_length; x++)
{
cout << cart_of_names[x] << endl;
}
return 0;
}
答案 2 :(得分:2)
查看STLSoft的fixed_array_2d(它是higher order siblings)。在Matthew Wilson的Imperfect C++中,详细讨论了如何实现它们以实现最佳性能。
答案 3 :(得分:0)
如果你不能使用std :: string,至少要查看C中的strncpy()等函数来复制你的名字。此外,您忘记了c样式的字符串是空终止的。
答案 4 :(得分:0)
如果使用strcpy()而不是 cart_of_names [0] [i] = name [i];
它可能会更好,但我只是看着所有代码而感到畏缩。
答案 5 :(得分:0)
除非你被禁止使用STL(这只是意思),否则只需使用std::list<std::string>
。 www.cplusplus.com提供了这些课程的详细说明和示例。
否则,你会遇到一个char数组数组:在这种情况下,要为很多缓冲区溢出错误做好准备。在上面的网站上查看char []管理功能(strncpy()
等),它们会让您的生活更轻松(但不是很多)。
答案 6 :(得分:0)
在C中,我发现概念化你要做的事情的最好方法是使用char *数组。同样的效果,但如果你开始使用它,我相信你可能会发现它在大脑中更容易。
答案 7 :(得分:0)
它看起来非常接近我。 C中的字符串以空值终止,这意味着字符串的结尾由空字符表示。从某种意义上说,C中的字符串实际上只是一个字节数组。
当你这样做时:
cout << "enter the name of the first item: ";
cin >> name;
如果我输入字符串“Book”,在内存中它看起来像是:
|0|1|2|3|4|5..49|
|B|o|o|k|0|*HERE BE DRAGONS*
嗯,它确实会包含与这些字母对应的ASCII values,但就我们的目的而言,它包含这些字母。 here be dragons
是您没有初始化的内存,因此它包含您的平台设置的任何垃圾。
因此,当您复制字符串时,您需要在字符串末尾查找0
字节。
for(int i=0; name[i]!=0; i++)
{
cart_of_names[0][i] = name[i];
}
然后当你输出它时,你实际上并不需要一次做一个角色。你可以cout<<cart_of_names[0]
。 cout
知道字符串的结束位置,因为终止空字符。
答案 8 :(得分:0)
“如果有更好的方法来制作c ++中的单词列表,我很乐意听到它。”
包括#include <string>
并使用std::string
。我认为std::string
类型是C ++规范的一部分。
#include <iostream>
#include <string>
int main(void) {
std::string list[7];
list[0] = "In C++";
list[1] = "you can use";
list[2] = "the `std::string` type.";
list[3] = "It removes";
list[4] = "many of the problems";
list[5] = "introduced by";
list[6] = "C-style strings.";
for (int k=0; k<7; k++) std::cout << list[k] << ' ';
std::cout << '\n';
return 0;
}