截断除前两个之外的整数的所有数字

时间:2013-10-15 15:58:15

标签: c++

例如:

int input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;

缩短'输入'并且只接受前两个数字的最简单方法是什么。 继续这个例子:

用户输入:432534。 输入值:43。

用户输入:12342342341234123412341235450596459863045896045。 输入值:12。

(编辑:说'数字'而不是'位')

8 个答案:

答案 0 :(得分:4)

我认为std::string操作可以让你回家。

std::string inputstr;
cout << "Please enter how many burgers you'd like" << endl;
cin >> inputstr;
inputstr = inputstr.substr(0, 2);

int input    
input = std::stoi(inputstr);      // C++11
input = atoi(inputstr.cstr());    // pre-C++11

文档:
http://en.cppreference.com/w/cpp/string/basic_string/stol
http://en.cppreference.com/w/cpp/string/byte/atoi

答案 1 :(得分:3)

读取前两位数字并形成一个整数:

int digit1 = std::cin.get() - '0';
int digit2 = std::cin.get() - '0';
int input = digit1 * 10 + digit2;

然后丢弃输入的其余部分:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

要处理负号,您可以执行以下操作:

int input = 1;

int digit1 = std::cin.get();
if (digit1 == '-') {
    input = -1;
    digit1 = std::cin.get();
}

digit1 -= '0';
int digit2 = std::cin.get() - '0';
input *= (digit1 * 10) + digit2;

如下所述,如果用户输入除两个数字之外的任何内容作为前两个字符,则不起作用。这很容易通过阅读和使用std::isdigit进行检查来检查。这取决于你继续前进或抛出某种错误。

如果用户仅输入一位数,这也不起作用。如果你需要它也可以工作,你可以读取整个字符串并使用它的大小或检查EOF。

输入操作本身也没有错误检查,但应该有实际代码。

答案 2 :(得分:0)

input作为字符串,将前两个字符转换为int

#include <sstream>
#include <string>
#include<iostream>

int main()
{
   std::string input ;

   std::cin>>input;
   std::stringstream iss(input.substr(0,2));
   int num;

   iss >> num;

   std::cout<<num;

}

答案 3 :(得分:0)

int i;
cin >> i;
while (i >= 100 || i <= -100) {
   i = i / 10;  // remove and ignore the last digit
}

由于整数溢出,这对于非常大的数字不起作用。我只是把它作为一个非常简单的算法。

答案 4 :(得分:0)

读取一个字符串并提取前两个字符:

std::string input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;
int first2;
if (input.size()>=1)
{
    if (input[0] == '-')
       std::cerr << "Negative num of burgers";
    else
       first2 = atoi(input.substr(0,2).c_str());
}
else
    std::cout << "Null number";

答案 5 :(得分:0)

我认为这种方法很容易理解。

int input;
cout << "Please enter how many burgers you'd like" << endl;
cin >> input;

char cTemp[50];

itoa(input, cTemp, 10);

char cResult[3] = {cTemp[0], cTemp[1], '\0'};

int output = atoi(cResult);

答案 6 :(得分:0)

我很惊讶没人提到fscanf。虽然C ++纯粹主义者可能会反对,但在这种情况下,这需要比cin少得多的代码(并且实质上更好的错误检查)。

int res = 0;
std::cout << "Please enter how many burgers you'd like" << std::endl;
if (fscanf(stdin, "%02d", &res) != 1) {
    std::cerr << "Invalid Input" << std::endl;
}
int c;
do {
    c = fgetc(stdin);
} while (c != '\n' && c != EOF);
std::cout << "Got " << res << std::endl;

答案 7 :(得分:-3)

让我通过为你重写来回答这个问题:

  

如何从标准输入读取字符串并将前2个字符写入标准输出?