如果数字,将字符串转换为int

时间:2013-02-12 16:05:34

标签: c++ if-statement char int

下面我有一个代码,我想要cin一定的值。如果我发现[它应该忽略它。但是如果用户插入一个数字而不是[,它应该将char转换为int并将其插入到else函数中的rows中。如何将此char转换为int并将其放入rows

    char ignoreChar;

    is >> ignoreChar;

    if(ignoreChar == '[')
    {
    }

    else
    {
    rows = ignoreChar;
    }

5 个答案:

答案 0 :(得分:1)

如果您认真对待ignoreChar将包含数字,您可以通过这种方式轻松将其转换为整数:

rows = ignoreChar - '0';

std::isdigit()函数可用于检查某个字符是否代表数字。

您可以将以下示例程序作为灵感:

#include <iostream>

using namespace std;

int main()
{
    int i = -1; // Equivalent of your "rows"

    char c; // Equivalent of your "ignoreChar"
    cin >> c;

    if (std::isdigit(c))
    {
        i = c - '0';
    }
    else
    {
        // Whatever...
    }

    cout << i;
}

答案 1 :(得分:0)

如果他们只输入一个角色,你应该能够输入它。

int a =(int)whateverNameOfChar;

这会将它转换为它的ASCII码,但你必须减去'0'

答案 2 :(得分:0)

要将您知道的char '0' '9' int转换为该数字值的rows = ignoreChar - '0'; ,您只需执行以下操作:

char

这是有效的,因为数字字符保证按标准具有连续值。

如果您需要确定std::isdigit(ignoreChar)是否为数字,则可以使用ignoreChar >= '0' && ignoreChar <= '9'或{{1}}的简单条件。

答案 3 :(得分:0)

“阅读用户输入”有几种不同的方法。

哪一种效果最好,取决于输入的格式/样式。您可以考虑两种不同的格式,“Linebased”和“free form”。自由格式将像C源代码一样输入,您可以在任何地方添加换行符,空格等。

Linebased有一个设置格式,其中每一行包含一组给定的输入[不一定是相同数量的输入,但行尾终止该特定输入]。

在自由格式输入中,您必须阅读一个字符,然后确定“此特定部分的含义是什么”,然后决定要做什么。有时您还需要使用peek()函数来检查下一个字符是什么,然后根据它确定要执行的操作。

在基于行的输入中,您使用getline()读取一行文本,然后将其拆分为您需要的任何格式,例如使用stringstream

接下来,您必须决定是编写自己的代码(或使用一些基本的标准翻译代码)还是使用stream函数来解析示例数字。编写更多代码将为您提供更好的方法来处理错误,例如“1234aqj”不是数字,但stream只会在该字符串中达到'a'时停止读取。

答案 4 :(得分:0)

很抱歉代码比可能的长得多。下面是“因子计数”的示例代码,其中输入符号及其处理。我试图展示不同的可能性。我现在看到的唯一问题是,如果用户只是输入没有输入任何符号的Enter,就没有任何反应。这是我在这里的第一篇文章,所以我对任何可能的字体,格式和其他废话感到非常抱歉。 MaxNum = 21是根据经验为unsigned long long int返回类型定义的。

我检查过这样的输入案例:abcde 2. -7 22 21

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>

unsigned long long int CalcFact( int p ) 
    { return p == 0 || p == 1 ? 1 : p*CalcFact(p-1); }

int main()
{
int MaxNum = 21, HowMany = 0, MaxAttempts = 5, Attempts = 0;
char AnyKey[] = "", *StrToOut = "The factorial of ", Num[3] = "";
bool IsOK = 0;

while( !IsOK && Attempts++ < MaxAttempts )
{
    std::cout << "Please enter an integer > 0 and <= 21: ";
    std::cin.width(sizeof(Num)/sizeof(char)); 
    std::cin >> Num;
    for( int Count = 0; Count < strlen(Num); Count++ )
        IsOK = isdigit(Num[Count]) ? true : false;
    if( IsOK )
    {
        if( !(atoi(Num) >= 0 && atoi(Num) <= MaxNum) )
            IsOK = false;
        else
        {
            for( int Count = 0; Count <= MaxNum; Count++ )
                {
                std::cout << StrToOut << Count << std::setfill('.') 
                << std::setw( Count < 10 ? 30 : 29 ) 
                << CalcFact(Count) << std::endl; 
                }
        }
    }
    if( !IsOK && Attempts > 0 )
    {
        std::cin.clear(); 
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
}
if( !IsOK ) 
    return -1;
else
    std::cin >> AnyKey;
return 0;
}