如何在一行中输入c++中的数组元素

How to user input the array elements in c++ in one line

本文关键字:输入 c++ 数组元素 一行      更新时间:2023-10-16

我是c++新手,基本上属于PHP。所以我试着写一个程序,只是为了练习,排序一个数组。我已经成功地创建了程序,它的静态数组值是

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }
struct myclass { bool operator() (int i,int j) { return (i<j);} } myobject;
int main () {
   int myints[] = {55,82,12,450,69,80,93,33};
  std::vector<int> myvector (myints, myints+8);               
  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           
  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); 
  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     
  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
    std::cout << 'n';
  return 0;
}

其输出是ok的。但是我希望从用户输入的元素应该分开space,。所以我试过了

int main () {
    char values;
    std::cout << "Enter , seperated values :";
    std::cin >> values;
  int myints[] = {values};

  /* other function same */
}

在编译时不会抛出错误。但是op不符合要求。

输入,分隔值:20,56,67,45

myvector包含:0 0 0 0 503276800 4196784 4196784

------------------ ( 程序退出代码:0)按返回继续

你可以使用这个简单的例子:

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
{
    stringstream ss;
    string str;
    getline(cin, str);
    replace( str.begin(), str.end(), ',', ' ');
    ss << str;
    int x = 0;
    while (ss >> x)
    {
        cout << x << endl;
    }
}

现场演示


或者,如果你想让它更通用,并且很好地包含在返回std::vector的函数中:

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
using namespace std;
template <typename T>
vector<T> getSeparatedValuesFromUser(char separator = ',')
{
    stringstream ss;
    string str;
    getline(cin, str);
    replace(str.begin(), str.end(), separator, ' ');
    ss << str;
    T value{0};
    vector<T> values;
    while (ss >> value)
    {
        values.push_back(value);
    }
    return values;
}
int main()
{
    cout << "Enter , seperated values: ";
    auto values = getSeparatedValuesFromUser<int>();
    //display values
    cout << "Read values: " << endl;
    for (auto v : values)
    {
        cout << v << endl;
    }
}

现场演示

将所有值读入一个字符串,然后使用标记器将单个值分开。

如何在c++中标记字符串?

上面的答案对于任意数量的输入都是非常好的,但是如果您已经知道要输入多少个数字,您可以这样做:

int[5] intList;
std::cin >> intList[0] >> intList[1] >> intList[2] >> intList[3] >> intList[4]

但请注意,此方法不检查数字是否正确放置,因此,如果输入中有例如字母或特殊字符,则可能会出现意外行为

让我们看看你写了什么:

int main () {
    char values;
    std::cout << "Enter , seperated values :";
    std::cin >> values; // read a single character
    int myints[] = {values}; // create a static array of size 1 containing the single character converted to an int
    /* other function same */
}

你需要的是:

#include <sstream>
#include <string>
...
int main () {
    std::cout << "Enter space seperated values :";
    std::vector<int> myvector;
    std::string line;
    std::getline(std::cin, line); // read characters until end of line into the string
    std::istringstream iss(line); // creates an input string stream to parse the line
    while(iss >> value) // so long as values can be parsed
        myvector.push_back(value); // append the parsed value to the vector
    /* other function same */
}

如果需要逗号分隔的输入,除了整数值之外,还需要将逗号解析为单个字符。

你在做什么

int main () {
    char values; //Declare space for one character
    std::cout << "Enter , seperated values :"; //Ask user to enter a value
    std::cin >> values; //Read into values (one value only)
  int myints[] = {values}; // assign the first element to the ASCII code of whatever user typed.

  /* other function same */
}

在语言char中作为8位整数工作。通过函数重载,可以实现不同的行为。阅读静态多态,了解它是如何工作的。

你需要做什么

std::vector<int> values;
char ch_in;
std::string temp;
while(cin.get(ch_in)) {
    switch(ch_in) {
         case ',':
         case ' ': //Fall through
             values.push_back(atoi(temp.c_str()); //include cstdlib for atoi
             temp.clear();
             break;
         default:
             temp+=ch_in;
    }
}

你应该把它放在一个单独的函数中。有了这个框架,您可以通过添加更多的用例来实现更花哨的语法,但是您需要将内容放入std::vector<int>之外的其他东西。您还可以(应该?)在default的情况下添加错误检查:

         default:
             if( (ch_in>='0' && ch_in<='9') 
                 || (temp.size()==0 && ch_in=='-') ) {
                 temp+=ch_in;
             }
             else {
                 cerr<<ch_in<<" is an illegal character here."
                 temp.clear();
             }
#include <iostream>
#include <string>
#include <sstream>
#include <string.h>
using namespace std;
// THIS CODE IS TO GIVE ARRAY IN ONE LINE AND OF DESIRED LENGHT ALSO WITH NEGATIVE NUMBERS
// You can also do it by using ASCII but we Are using library name
//   <sstream>   to convert string charters to numbers
//O(n) time complexity
int main()
{
/*
// INPUT
// 7 array length
// 34-56-789   // without space b/w them */
    int N;
    cout << "Enter the size of the array " << endl;
    cin >> N;
    cout << "INPUT Without giving space b/w " << endl;
    string strx;
    cin >> strx;
    int X[N]; // array to store num
    int p = 0;
    // NOTE USE HERE STRX.LENGHT() becouse we have to go through the whole string
    for (int i = 0; i < strx.length(); i++)
    {   // we have declare tempx to store a particular character
        // one time
        string tempx;
        tempx = strx[i];
        stringstream strtointx(tempx);
        //  this is the syntax to convert char to int using <sstream>
        if (strx[i] == '-')
        {
/*
 The tricky point is when you give string as 1-23
 here - and 2 are the separte characters so we are not
getting -2 as number but - and 2 so what we do is 
we chek for '-' sign as the character next to it 
will be treated as negative number 
 */
        tempx = strx[i + 1];
// by assigning strx[i+1] to tempx so that we can getting the which should be treated as negative number
        stringstream strtointx(tempx);
// still it is a charter type now again using library
// convert it to int type
            strtointx >> X[p];
            X[p] = -X[p];
// now make that number to negative ones as we want it to be negative
            i++;
// inside this if i++ will help you to skip the next charcter of string
// so you can get desired output
        } 
        // now for all the positive ones to int type
        else{   strtointx >> X[p];     }
         p++; // finally increment p by 1 outside if and else block
        }
    // loop ends now get your desired output
    cout<<"OUTPUT "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout << X[i] << " ";
    }
    cout<<endl;
    cout<<"CODE BY MUKUL RANA NIT SGR Bch(2020)";
    return 0;
}

// OUTPUT
/*
Enter the size of the array 
7
INPUT Without giving space b/w 
34-56-789
OUTPUT 
3 4 -5 6 -7 8 9
CODE BY MUKUL RANA NIT SGR Bch(2020)
PS C:UsersuserDesktopstudy c++> 
*/

// CAUTION :
/*
1) do not give input with spaces 
****  if you do then first you have to change /chek the code for spaces indexes also ***
2)do not give charates as 56-89@#13 as you want here only numbers 
3) this only for integer if you want to float or double you have to do some changes here 
 because charters index and length would be difeerent in string.
*/