C++ 字符数组转化成整型数组

#include "stdafx.h"
#include "string.h"
#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{
cout<<"请选择你要的排序方式:"<<endl;
cout<<"1.冒泡排序"<<endl;
cout<<"2.选择排序"<<endl;
int choice;
cin>>choice;
cin.get();
cout<<"请输入需要排序的数字:"<<endl;
const int max_size=99;
char str[max_size];
cin.getline(str,max_size);
int array[max_size],i,count;
count=strlen(str)-1;
for(i=0;i<count;i++)
array[i]=str[i]-'0';
for(i=0;i<count;i++)
cout<<array[i] ;
system("PAUSE");
return 0;
}

请问错在哪里?

// 代码修改了,修改的地方都加了注释,看不懂再问我

// 其实你这个写法只能取到个位数字,如果是两位以上的数字,用这样的方法就不行了


#include "string.h"

#include<iostream>

using namespace std;


int main(int argc, char* argv[])

{

    cout<<"请选择你要的排序方式:"<<endl;

    cout<<"1.冒泡排序"<<endl;

    cout<<"2.选择排序"<<endl;

    int choice;

    cin>>choice;

    cin.get();

    cout<<"请输入需要排序的数字:"<<endl;

    const int max_size=99;

    char str[max_size];

    cin.getline(str,max_size);

    int array[max_size],i,count;

    //count=strlen(str)-1;
    count = strlen(str);        //  这里应该用整个字符数组的长度

    int j = 0;                  // 记录有多少个数字
    for(i=0,j = 0;i<count;i++)
    {
        // str[i]有可能是空格,所以要判断一下
        if (str[i] == ' ')
        {
            continue;
        }
        array[j]=str[i]-'0';
        j++;
    }
    count = j;
    
    for(i=0;i<count;i++)

        cout<<array[i] ;

    system("PAUSE");

    return 0;

}

追问

看懂了,知道错在哪里了;
请问关于字符数组转换成整型数组有没有更简单的方法?

追答    char c[5] = "888";
    int m = atoi(c);
    这个可以很方便地转。

追问

char c[5] = "888";

   int m = atoi(c);//只能转化成整型,不能转化成数组,我想要数组,因为接下来还要排序。

可是这样出错:

追答

嗯,这个就是单独转的。
如果你想把型如“1 23 55 88”转成[1,23,55,88]
需要把字符数组先转成二维字符数组,即["1", "23", "55", "88"]
然后再把每一个字符串用atoi转成int型。
当然,如果你们的内容要求没有那么严格,只做个位的减法也可以了。
因为这个转化的过程,其实更多考查的是对字符数组的使用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-08
str = "1 2\000\213\004\b\001\000\000\000\377\377\000\000\370\370\377\267\250\360\377\277\065\022Է5\020Է\250\360\377\277\255\213\004\b$\003\347\267\364\237\004\b\270\360\377\277 \207\004\b\200\020\377\267\364\237\004\b\350\360\377\277I\213\004\b$\003\347\267\364\377\346\267\060\213\004\b\350\360\377\277\065\022Է\200\020\377\267;\213\004\b"
array = {1, -16,
调试发现,str中有空格,在1和2之间,也就是你输入的1和2之间的空格
空格的ASCii值是32,‘0’是48,所以出现了一个-16,为了避免这种情况,你必须把str中的空格去掉。本回答被网友采纳
第2个回答  2014-10-08
count=strlen(str)-1;
改为count=strlen(str);
并且你没写排序的代码啊,根本没排啊,只是原样输出。追问

count=strlen(str)-1;也还是不对的;

排序的函数还没写,转化整型数组就出问题了;

追答

你不要带空格,直接输入12353这样是不会出错的。
如果你一定需要加空格,就要对输入赋值修改下。

相似回答