我正在编写一个程序,提示用户:
-
数组大小
-
要放入数组的值
第一部分很好,我创建一个动态分配的数组(必需),并使其成为用户想要的大小 .
我坚持下一部分 . 期望用户输入一系列由逗号分隔的整数,例如:1,2,3,4,5
如何接受这些整数并将它们放入我动态分配的数组中?我读到默认情况下cin接受由空格分隔的整数,我可以将其更改为逗号吗?
请以最简单的方式解释,我是编程的初学者(对不起!)
编辑:TY非常适合所有答案 . 问题是我们还没有涵盖向量...有没有一种方法只使用我拥有的动态分配的数组?
到目前为止我的功能看起来像这样 . 我在main中创建了一个默认数组 . 我打算将它传递给这个函数,创建新数组,填充它,并更新指针以指向新数组 .
int *fill (int *&array, int *limit) {
cout << "What is the desired array size?: ";
while ( !(cin >> *limit) || *limit < 0 ) {
cout << " Invalid entry. Please enter a positive integer: ";
cin.clear();
cin.ignore (1000, 10);
}
int *newarr;
newarr = new int[*limit]
//I'm stuck here
}
7 回答
先验,您应该检查逗号是否存在,如果不存在则声明错误 . 出于这个原因,我将分别处理第一个数字:
请注意,您不必先询问尺寸 . 如果内存可用,阵列(
std::vector
)将根据需要自动扩展 .最后:在现实生活中的例子中,您可能希望逐行读取,以便在格式错误的情况下输出行号,并从这样的错误中恢复并继续 . 这有点复杂,特别是如果您希望能够在换行符之前或之后接受分隔符 .
所有现有答案都非常出色,但所有答案都针对您的特定任务 . 因此,我编写了一般代码,允许以标准方式输入逗号分隔值:
样品用法http://coliru.stacked-crooked.com/a/a345232cd5381bd2:
由于你是初学者,现在这段代码可能对你来说太过分了,但我想我会发布这个代码是为了完整性 .
您可以使用
getline()
方法,如下所示:代码从this回答中获取并处理 .
维克多的答案有效,但不仅仅是必要的 . 您可以直接调用cin上的ignore()来跳过输入流中的逗号 .
此代码的作用是以整数形式读取输入数组的大小,在该元素数量的整数向量中保留空间,然后循环到指定的元素数,交替从标准输入读取整数并跳过分隔逗号(对cin.ignore()的调用) . 一旦它读取了所请求的元素数量,它就会将它们打印出来并退出 .
使用C 11中的新std :: stoi函数可以简化代码 . 它在转换时处理输入中的空格,并且仅当特定标记以非数字字符开始时才抛出异常 . 因此,此代码将接受输入
容易但拒绝
一个问题仍然存在,因为你可以看到,在第一种情况下,它将显示“12,32,34,45,23”,它在截断“34 45”到34的末尾 . 可以添加一个特殊情况来处理这是错误或忽略令牌中间的空格 .
这段代码很适合C 11以后,它很简单,我使用了stringstreams和getline和stoi函数