2 u010770770 u010770770 于 2015.06.02 21:35 提问

根据输入字符结束数组输入

我的意思是说,比如要输入一个不定长的数组(或者是字符串),提示用户输入完后以某个字符或者标志结束,这个要怎么实现啊?

8个回答

chaobo_lu
chaobo_lu   2015.06.03 00:34
已采纳

用 realloc() ,下面是实现代码作参考

 #include <stdio.h>
#include <malloc.h>

int main(void)
{
    char *p = NULL, *p1 = NULL, c;
    int count = 0, i = 0, size = 100;

    if(!(p = (char *)malloc(size)))
        return 0;

    while('0' != (c = getchar()))
    {
        if(count < 100)
        {
            p[i] = c;
        }
        else
        {
            size += 100;
            p1 = (char *)realloc(p, size);
            if(!p1)
            {
                break;
            }
            else
            {
                p = p1;
            }

            p[i] = c;
            count = 0;
        }

        count++;
        i++;
    }

    free(p);
    return 0;
}
u010770770
u010770770 谢谢
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.02 21:37

不定长不等于无限长。比如说开一个1万大小的数组,对计算机来说微乎其微。但是绝对够用。
当然,你也可以使用string vector或者链表。

caozhy
caozhy   Ds   Rxr 2015.06.02 21:38
 char data[10000];
int i = 0;
char ch = '\0';
while ((ch = getchar()) == '\n') //比如说\n是结束符
{
    data[i++] = ch;
}
data[i] = '\0';
xy707707
xy707707   2015.06.02 21:56

使用数组的话,长度超过数组分配的长度是,再进行长度扩充就好了

tongyi55555
tongyi55555   2015.06.02 22:12
    List<Integer> list = new ArrayList<Integer>();
        System.out.println("请输入一个整数,输入over结束输入");
        Scanner scanner = new Scanner(System.in);
        String valueStr = scanner.next();
        //判断是否是整数
        Pattern pattern = Pattern.compile("-?\\d+");
        while(!"over".equals(valueStr)){
            if(!pattern.matcher(valueStr).matches()){
                System.out.println("输入的不是整数,请重新输入");
                valueStr = scanner.next();
                continue;
            }
            list.add(Integer.parseInt(valueStr));
            System.out.println("请输入一个整数,输入over结束输入");
            valueStr = scanner.next();
        }
        System.out.print("您共输入了"+list.size()+"个整数");
        System.out.println(list);
u010770770
u010770770 不好意思,是我没有说清楚,是c++的,不过还是很感谢你
2 年多之前 回复
QooQooQ
QooQooQ   2015.06.02 22:41

用Integer.MAX_VALUE来定义一个无限长的数组

a1193561652
a1193561652   Rxr 2015.06.02 23:00

申请一个大一点的数组,循环接收字符存入数组,并判断如果接收到某个特定的字符就跳出循环。

char a[MAX];
int i=0;
while(a[i] = getchar() != 'x')
     i++;
fcxxxer
fcxxxer   2015.06.09 00:25

可以在程序运行前开足够大的空间,然后程序读入后判断何时结束即可。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!