【问题标题】:convert string to array of integer in c++在c ++中将字符串转换为整数数组
【发布时间】:2018-04-25 20:24:33
【问题描述】:

有人会帮助我理解以下代码中的 while 循环关于它的作用吗?例如,从用户那里获取输入:1 2 3 8(未给出输入大小)和一个值(任何索引)显示数组的大小。它正在打印数组的最大值。答案是 8。

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        string x;
        getline(cin, x);
        ll p;
        istringstream iss(x);// use of this function
        vector<ll> v;
        ll ans;
        while(iss>>p)// what this loop do
        { 
           v.push_back(p);
        }
        ll size=v.size()-1;
        sort(v.begin(), v.end());
        if(size==v[size])
        {  
            ans=v[size-1];
        } 
        else
        {
            ans=v[size];
        }
        cout<<ans<<"\n";
    }
    return 0;
}

【问题讨论】:

标签: c++ arrays string c++11 int


【解决方案1】:

istringstream iss(x) 创建一个名为 iss 的字符串流,由字符串 x 组成。 iss >> p 从 iss 流中提取下一个元素并将其放入 p 中。返回值是 int 因为变量 p 是 int 类型。

while(iss>>p)           // get an int value from string stream iss
{ 
     v.push_back(p);    // push the int value to the vector
}

你必须在 cin 之后使用 cin.ignore()。否则下一个 getline 函数将只使用换行符。像这样:

cin >> t;
cin.ignore();

【讨论】:

  • 字符串流只需要int值而不是空格?
  • 是的,它需要空格,但在使用 cin 后仍然必须忽略一个换行符。检查:stackoverflow.com/questions/12691316/…
  • 如果给定字符串“1 2 3 4”,则 istringstream 将在每次 while 循环迭代中返回 1 、 2 、 3 和 4
  • 很高兴听到这个消息:D。不要忘记检查答案并投票。! :)
  • 哦..嗯..你仍然可以选择作为答案,你的声誉会增加:)
【解决方案2】:
    string str;
    cin>>str;
    int size = str.size(),arr[size];  //array of size equal to string size
    for(int i=0;i<size;i++)
    {
        arr[i] = (int)str[i]-'0';    //typecasting to int
    }

对于 str[i]-'0' 的解释是: What is the purpose of using str[i]-'0' where str is a string? 如果无法进行类型转换,可能会发生错误

【讨论】:

    【解决方案3】:

    使用函数 stoi()(对于 int 值)或 stol()(对于 long 值)也可以选择整数值。

    int n=56; // use #include<bits/stdc++.h>
    string s=to_string(n); // we get string "56" that's for integer to string
    int x=stoi(substr(index,length));// for string to integer
    

    【讨论】:

    • 这对处理多个值毫无帮助
    • 原来如此。你知道处理多个值的函数吗?
    • strtol 非常适合用于值列表,因为在解析每个值之后,它会返回一个指向下一步的指针
    • 它的工作方式类似于iss&gt;&gt;pcin.ignore()(如上所述)。 strtol有利于价值转化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多