2 musichien MUSICHIEN 于 2016.04.02 12:34 提问

C++,如何将未知长度的string输入数组

如代码,我发现程序在运行时会跳过cin.get,这是怎么回事啊?另外,关于将未知长度的字符串输入数组,还有什么好办法吗?

 int main()
{
    int time;
    scanf("%d", &time);
    int count=0;
    while(count < time)
    {
        string str;
        char temp;
        int i;

        while((temp=cin.get())!='\n')
        {
                str +=temp;
        }
        length =str.length();

        char* preorder = new char[length];
        char* inorder = new char[length];

        for(i = 0;i<length;i++)
        {
            preorder[i]=str[i];
        }

        for(i=0;i<length;i++)
        {
            scanf("%c", inorder[i]);
        }

        sort(preorder, inorder, length);

        count++;
        delete preorder;
        delete inorder;
    }
    return 0;
}

5个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.02 12:52
已采纳

scanf("%d", &time);输入完后,输入缓冲区还会遗留下一个回车符
然后执行while((temp=cin.get())!='\n'),会直接读取遗留的回车,temp就等于'\n'了,所以楼主感觉跳过了这句
可以在scanf("%d", &time);后加上fflush(stdin);用来清空输入缓冲区

haroldfinch
haroldfinch   2016.04.02 13:30

同意楼上,或者加getchar()把回车读掉,就不会干扰后面的输入了。

yokeyoke
yokeyoke   2016.04.02 13:49

第一个问题:《C++ primer plus》六的第17章有详细介绍输入输出

第二个问题:
char字符串和其它字符串都是必须要用一个特定的字符作为结束标识'\0'。如果 你的数组包含了类似'\0'的标记符号,你可以用:

 const char* charA="abcde";
    int i=0;//计数器
    while(charA[i]<>'\0')
    {
        ++i;
    }

来计算里面有多少个字符。

如果你的字符数组或其它数组没有标记则应该在产生这个数组时,在传出数组的同时传出数组的个数。

例如:

你从一个包含了"12 23 34 54"的文本文件中读取数字。
在读取前你是不知道里面包含了多少个数字的。通过计算其中的空格你得到了里面包含的数字个数,
然后用

 int* number=new int[qtyNumber]

得到了数组,这个时候你就必须在传出这个数组的同时将数组中包含的数字个数传出去。到什么地方都能知道这个数组包含了多少个数字

CLeiGe
CLeiGe   2016.04.02 14:36

你的换行符没有处理,导致程序多读取了一个换行符

caoshangpa
caoshangpa   2016.04.03 09:57

用Qt吧,处理字符串很方便的

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