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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++输入获取未知长度的行输入数组 与 输出控制
C++输入获取未知长度的行输入数组 与 输出控制
C++ 中使用字符数组来存放未知长度的字符串
#include #include using namespace std; int main() {    size_t arry_size = 10;    char * p_str = new char[arry_size];    int count =0;    char temp;    while(cin.get(temp))    {
建立一个长度未知的数组
#include using namespace std; int main(){ int i,n; cin>>n; int *arr= new int[n]; //以下代码对一个数组第一位进行了赋值 arr[0]=1; //以下代码对一个长度为n的数组第二位开始依次做计算,并输出最后一个值得结果 for(i=1;i<n;i++){ arr[i]=arr[i-1]+i; }
Java如何输入不确定长度的数组
public static void main(String[] args) { Scanner in = new Scanner(System.in); List<Integer> list=new ArrayList<Integer>(); while (in.hasNext()) { String s=in.nextLin
【C++学习笔记】如何输入含有未知变量的数组?
C++本身不支持未知大小的动态数组,通常有如下方法解决: 1、动态申请内存 int * p, i; cout << "请输入数组大小"; cin >> i; p = new int[i]; delete []p; 2、使用vector类
狗日的scanf-------------关于不定长度的数据输入到数组
每次玩C语言的时候,看到scanf都他妈的一肚子火,我觉得当初设计scanf的大牛脑子都不正常,搞得我们这些菜鸟晕头转向,仔细研究你会发现scanf的规则之多让人蛋疼,稍不注意你就得不到你想要的输入结果。 今天我想说下关于很多人会问的 不定长的数据输入到数组的情况,网上搜了很多,很多人的答案我也运行过,都不正确,跟同学讨论了会,得出一个反正我在VS上运行通过的版本。 比如:1 2 3 4
c++未知数组大小如何创建
两种方法,简单一点的,C++允许动态定义数组,所以可以这样 #include using namespace std; int main() { int m, n; cin >> m >> n; int a[m][n]; int i, j; for(i = 0; i < m; i ++) for(j = 0; j < n; j ++) cin >> a[i][j]; co
C++输入不定长字符串方法
在很多时候,我们对需要输入的字符串的长度并不可知,一般情况下,我们都通过设定一个范围来解决。下面我总结了一下如何输入字符串而不需要限定长度的一种方法及其代码实现举例。 由于我们不知道输入的大小,所以我们采用C++中string + vector的方法来实现,我们先来看下面的例子: 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将
c语言由键盘输入不定长数组的元素
#include #define N 100 int main() {     int a[N],i=0,x,y,n,flag=0;     char ch;     /*while(scanf("%d",&x)!=-1)   //测试过,失败     {         a[i]=x;         i++;     }*/     do     {        
输入一个长度未知的字符串,用动态分配内存的方法(C语言实现)
int main(int argc, char** argv) { int strLen = 5; char ch; char* str = (char*)malloc(sizeof(char*) * strLen); int count = 0; printf("Please input a string: "); do { ch = getchar()(); count++; if (cou