没有itoa()将int转换为char

时间:2014-11-01 04:29:09

标签: c++ file char

我有一个程序,我应该将int转换为char

但我不能使用itoa(),因为网站的评判不支持

所以我写了这个:

xt[i]= rmn+'0';

但是我收到了这个错误:

Runtime error: Illegal file open (/dev/tty) 

我该怎么转换呢?

我的代码是:(对于USACO的palsquare问题)

/*
ID: sa.13781
PROG: palsquare
LANG: C++
*/
#include <iostream>
#include <fstream>
using namespace std;


ofstream fout("palsquare.out");

int tool(char xt[])//CORRECT
{
    int p = 0;
    while (xt[p] != 0)
        p++;
    return p;
}

void prt(char xt[])//CORRECT
{
    int p = 0;
    while (xt[p] != 0)
    {
        fout << xt[p];
        p++;
    }
}

void mabna(int a, char xt[], int mab)
{
    int ex = 1, tavan = 0, rmn, n;
    for (; ex <= a; ex *= mab)
        tavan++;

    for (int i = tavan - 1; a != 0; i--, a /= mab)
    {
        rmn = a % mab;

        switch (rmn)
        {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
            xt[i] = rmn + '0';
            break;
        case 10:
            xt[i] = 'A';
            break;
        case 11:
            xt[i] = 'B';
            break;
        case 12:
            xt[i] = 'C';
            break;
        case 13:
            xt[i] = 'D';
            break;
        case 14:
            xt[i] = 'E';
            break;
        case 15:
            xt[i] = 'F';
            break;
        case 16:
            xt[i] = 'G';
            break;
        case 17:
            xt[i] = 'H';
            break;
        case 18:
            xt[i] = 'I';
            break;
        case 19:
            xt[i] = 'J';
            break;
        }
    }
}

bool mirror(char *xt)//CORRECT
{
    int p = 0;
    int n = tool(xt);
    for (int i = 0; i < (n / 2); i++)
        if (xt[i] == xt[n - i - 1])
            p++;
    if (p == (n / 2))
        return true;
    return false;
}

void calc(int mab) //CORRECT
{
    for (int i = 1; i <= 300; i++)
    {

        char p[10] = {0}, p2[10] = {0};
        mabna(i * i, p2, mab);
        if ( mirror(p2) == true )
        {
            mabna(i, p, mab);
            prt(p);
            fout << " ";
            prt(p2);
            fout << "\n";
        }
    }
}

int main()
{
    ifstream fin("palsquare.in");

    int mab;
    fin >> mab;
    calc(mab);

    return 0;
}

2 个答案:

答案 0 :(得分:5)

你能用sprintf()吗?

char s[16];
int x = 15;
sprintf(s, "%d", x);

答案 1 :(得分:0)

如果您的int值是一位数,则可以使用(char)投射 如果您的int值超过一位数,那么您永远不会指望一个char来保留它。 char只能包含单个字符。

int num = 7;
char ch = (num + 48);  //same effect as + '0'
cout << ch << endl;

输出:7


如果您的int值超过一位数。您需要char *或char []来保存转换后的数据。例如:

int num = 123987;
int len = 6;
int idx = len-1;;
char ch[20];

while(num > 0)
{
    ch[idx] = (num%10) + 48;
    num /= 10;
    idx --;         
}

for(int x=0; x<len; x++)
    cout << "OUTPUT in char: " << ch[x];

输入char:123987

这不是处理这种情况的完美方式,但它可能会为您提供所要求的内容。