将char数组转换为int数组c ++

时间:2010-06-14 06:38:23

标签: c++ arrays

我在将char数组从文件读取转换为int数组时遇到问题。也许有人可以帮助我。这是我的代码:

char vectorPatron[67];
int iPatrones[67];
archivo = fopen("1_0.txt", "r");
for(i=0;i<67;i++){
    fscanf(archivo, "%c", &vectorPatron[i]);
    printf("%c",vectorPatron[i]);
}
fclose(archivo);
for(i=0;i<67;i++){
    iPatrones[i] = atoi(&vectorPatron[i]);
    printf("%d",iPatrones[i]);
}

4 个答案:

答案 0 :(得分:5)

尽管使用了一些C ++功能,但大多数代码看起来更像C.我可能会推荐更多类似的内容:

struct to_int { 
    int operator()(char c) { return c - '0'; }
};

const int num = 67;
std::vector<char> patrons(num);
std::vector<int> patron_values(num);

std::ifstream archivo("1_0.txt");  
archivo.read(&patrons[0], num);

std::cout.write(&patrons[0], num);

std::transform(patrons.begin(), patrons.end(), patron_values.begin(), to_int());
std::copy(patron_values.begin(), patron_values.end(), 
          std::ostream_iterator<int>(std::cout, "\n"));

答案 1 :(得分:2)

那是因为atoi收到一个空分隔的字符串,而你传递一个指向单个char的指针(两者基本上都是char *,但意图和用途不同)

atoi的来电替换为iPatrons[i] = vectorPatron[i] - '0';

此外,您可以移除vectorPatrons数组,只需在第一个循环中读取一个char,然后分配到iPatrons数组中的相应位置。

答案 2 :(得分:1)

我相信你不能使用atoi函数,因为它需要一个字符串(由\ 0字符终止的字符数组)。你为什么不这样做:

for(i=0;i<67;i++){
    iPatrones[i] = int(vectorPatron[i] - '0');
    printf("%d",iPatrones[i]);
}

注意:我不知道源文件是怎么样的,所以可能存在错误。这些数字究竟是如何存储在文件中的?也许你可以使用(如果它们被存储为以空格分隔的数字):

for(i=0;i<67;i++){
    fscanf(archivo, "%d", &iPatron[i]);        
}

答案 3 :(得分:0)

这是一种非常简单且可重复使用的方法。此函数将char转换为int并返回intBAD_RETURN = 10因为每个字符都是从'0'到'9'。该函数的来源是cplusplus.com。

int CharToInt(char ch)
{
    return((ch >= '0' && ch <= '9') ? ch - '0' : BAD_RETURN);
}

这是我自己的功能,适用于VS2015编译器。定义一个int数组并将其初始化为0。将此int数组及其char原型数组传递给以下函数。此函数使用CharToInt函数将char数组转换为int数组:

void copyCharArrToIntArr(char from[MAX], int to[MAX]) 
{
    for (int i = 0; i < MAX; i++)
        to[i] = CharToInt(from[i]);
}

这种方法适用于矢量。而不是MAX,使用i < yourVector.size()作为for循环条件。