注册 登录
编程论坛 C++教室

【求助】如何输入未知长度的数组啊

liang890806 发布于 2009-09-10 09:36, 12688 次点击
想要输入一串任意长度的数组
自己写了一点。。
程序代码:
int b[100];
    cout<<"请输入一组整数,数量在100以内"<<endl;
    for(int i=0;i<100;i++)
    {
        cin>>b[i];
        if(b[i]=='over')
            break;

    }
输入over后结束循环 = =,
运行后。。。出现的奇怪的事。。。
。。。话说怎么发图啊
想截图发上来
12 回复
#2
liang8908062009-09-10 10:47
各位大人~~请为小的解惑吧~~~
谢谢了~~~
#3
哥特复兴2009-09-10 12:03
你定义的上整型的数组,怎么让b[i]==字符串
用这样的数组一般用在字符串上..代码如下:
#include<iostream>  
using namespace std;  
void main()  
{  
    int i;
    int j;
    char b[100];     //定义字符串数组,长度为100;  
    cout<<"请输入任意长度字符串"<<endl;  
    for(i=0; i<100; i++)  
    {  
        cin>>b[i];  
        if(b[i]=='p')   //输入P退出,
            break;  
    }  
    cout<<"输出刚才输入的字符串"<<endl;  
    for(j=0; j<i; j++) //这里需要注意,我犯了好多错误,最后才想到是这里的错误,,输出是长度一定要和输入是的一样,否则会出现内存泄露。。。。
    {  
        cout<<b[j]<<" ";  
    }  
    cout<<endl;  
}
#4
哥特复兴2009-09-10 12:06
吃饭……
有什么问题留言~~~~~~
#5
liang8908062009-09-10 12:41
谢谢指教~~~~
原来我输出时候出现的奇怪事物是内存泄漏。。。。。
#6
liang8908062009-09-10 12:49
还是有问题。。。。
整个代码是这样的
程序代码:
#include "stdafx.h"
using namespace std;
class ARR
{
    int m;                                                       //数组实际元素个数
    int a[100];                                                  //存放原始数组以及结果数组
    int t[100];                                                  //存放每个数据重复次数
public:
    ARR(int c[],int size)                                         
    {
        m=size;
        for(int i=0;i<m;i++)
        {
            a[i]=c[i];
            t[i]=0;
            
        }
    }
    void stl();                                                 //把数组元素从小到大排序
    void delsame();                                             //完成数组a中相同元素的删除工作 以及统计重复次数工作
    void show()                                                 //输出数组
    {

        for(int i=0;i<m;i++)
        {
            cout<<a[i]<<"   ";
        }
        cout<<endl;
    }
    void showT()
    {
        for(int i=0;i<m;i++)
        {
            cout<<a[i]<<"出现了 "<<t[i]<<"次";
            if(((i+1)%3)==0)
                cout<<endl;
        }
    }
};
void ARR::stl()                                     //类外定义函数 完成数组排序工作
{
    int i,j,temp;
    for(i=0;i<m-1;i++)
    {
        for(j=i+1;j<m-1;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
};
void ARR::delsame()                                  //在类的外部定义函数,完成数组a中相同元素的删除工作
{
    int i,j;
    for(i=0;i<m-1;i++)
    {
        t[i]+=1;                                    //统计该元素出现次数
        if(a[i]==a[i+1])
        {
            for(j=i+1;j<m-1;j++)
            {
                a[j]=a[j+1];
            }
            m--;
            i--;
        }
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    int b[100];
    int i;
    cout<<"请输入一组整数,数量在100以内"<<endl;
    for(i=0;i<100;i++)
    {
        cin>>b[i];
        if(b[i]=='p')
            break;

    }
    ARR v(b,i);
    v.show();
    v.delsame();
    v.show();
    v.showT();
    return 0;
}
想的是输入任意长度的数
排序后把相同的元素删除

修改后还是会出现内存泄露。。。。

#7
liang8908062009-09-10 12:55
int _tmain(int argc, _TCHAR* argv[])
{
    int b[100];
    int i;
    cout<<"请输入一组整数,数量在100以内"<<endl;
    for(i=0;i<100;i++)
    {
        cin>>b[i];
        if(b[i]=='p')
            break;

    }
    ARR v(b,i);    //这里原来是 ARR v(b,sizeof(b)/sizeof(b[0]))  
    v.show();
    v.delsame();
    v.show();
    v.showT();
    return 0;
}
#8
a26960262009-09-10 14:02
回复 5楼 liang890806
就一个短程序  有必要写这么长吗?
#9
liang8908062009-09-10 14:52
= =
重点是ARR v(b,i)这么写为什么会内存泄漏
错在哪里
如何解决

#10
andytony12342009-11-09 15:00
我也在想这个问题,我用的是Turbor C++;
冥思苦想,然后不断验证,发现这个方法居然可以!!这个是原程序,你看下..
#include<stdio.h>
void main()
{char a[100],i,n;clrscr();
for(i=0;i<100;i++)
{scanf("%c",&a[i]);    /当输入o的时候就表示停止向数组输入元素,/
if(a[i]=='o')
break;}
n=i;                          并且n就是数组长度了里面的元素是(a[0]~a[n-1])
for(i=0;i<=n-1;i++)
printf("%c",a[i]);}

输入:1 2 3 4 5 6 7 8 9 10 o 回车
输出:1 2 3 4 5 6 7 8 9 10


这是个意外,因为我printf函数里明明就是%c为什么输出的还是数字呢,这个我就不理解了....我也是初学...而且scanf函数里,也是要求输入%c(字符)而我却是输入的数字,但是却也行!!
第一次替人回答,呜呜.....
#11
andytony12342009-11-09 15:15
错了!!乍一看是对的....
但是.n不是数组长度...这个数组,也不是数字数组.而是符号数组,中间的空格也算是符号(也算元素);
所以...在进行对数组处理的时候,可能会因为这个而出错....我再想想.....嗯..思考.....
#12
一旋无风2009-11-11 16:50
回复 楼主 liang890806
int b[100];
    cout<<"请输入一组整数,数量在100以内"<<endl;
    for(int i=0;i<100;i++)
    {
        cin>>b[i];
        if(b[i]=='over')
            break;

    }
楼主有没有搞错?b[i]=='over'?这也行?'over'这什么意思?晕啊
#13
andytony12342009-11-25 23:14
这个问题,楼主,还要不要答案啊..我终于想通了...要的话,我就回复下..
1