从一串数字C ++创建一系列数字

时间:2017-02-08 21:41:26

标签: c++ string

我需要制作一个用户输入一串数字的程序 然后输出分组的数字,以便每个分组(以空格分隔)大于将数字放在一起时的最后分组。
如果剩余的数字一起等于小于先前分组的总和,则省略它们 例:
314159265会输出3 14 15 92
这里:3< 14< 15< 92但65被省略,因为它小于92


9876543210会输出9 87 654 3210
这里:9< 87< 654< 3210

它必须使用1-20个字符长的字符串执行此操作5次。

我的代码适用于较短的字符串,即上面的字符串,但是当它们长于大约12个字符时,结束输出会混乱。

例: 98765432101234567898输出9 87 654 3211 12333代替9 81 654 3210 12345 67898 这里:9< 87< 654< 3211<它应该输出9< 12333。 87< 654< 3210< 12345< 67898

我不知道为什么它不能使用更大的字符串,任何帮助都会受到高度赞赏。

#include<iostream>
#include<iomanip>
#include<math.h>
#include<string>
#include<stdlib.h>

using namespace std;

void input (string &a,string num[20]){
    string numfinal,temp;
    cout<<"Enter the string of numbers: ";
    getline(cin, a);
    int length=a.length();
    for(int i=0;i<length;i++){
        num[i]=a.substr(i,1);
    }

    for(int r=0;r<length;r++){
        int n=atoi(temp.c_str());
        int o=atoi(num[r].c_str());
        int p=temp.length();
        if((length-r<=p)&&(o<n)){
        }
        else if((o>n)||(r==0)){
            temp=num[r];
            numfinal=numfinal+temp+" ";
        }
        else if((o<n)||(o=n)){
            int w=n;
            temp=num[r]+num[r+1];
            n=atoi(temp.c_str());
            if(n<w){
                int a=1;
                int q=r+2;
                while(n<w){
                    temp=temp+num[q];
                    n=atoi(temp.c_str());
                    p++;
                    a++;
                }
                numfinal=numfinal+temp+" ";
                r=r+a;
            }
            else{
                numfinal=numfinal+temp+" ";
                r++;
            }
        }
    }
    cout<<numfinal<<endl;
}

int main(){
    string a;
    string num[20];
    for(int r=0;r<5;r++){
        input(a,num);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

此代码有效。但是不要忘记编写一个简单的代码并使用新的C ++编程风格。

#include <vector>
using namespace std;
vector<string>  Input( )
{
    string a;
    cin >> a;
    vector<string> num;
    string current("-1");
    string str;
    for(auto c : a)
    {
        str.append(1, c);
        if (stoi(str) > stoi(current) )
        {
            num.push_back(str);
            current = str;
            cout << str << " ";
            str = "";
        }
    }
    cout << endl;
    return num;
}

int main() {
    for (int i = 0; i<5; i++) {
        vector<string> num;
        num = Input();
    }
    return 0;
}

答案 1 :(得分:0)

您的while循环中似乎缺少q++

while(n < w) {
   temp = temp + num[q];
   n = atoi(temp.c_str());
   p++;
   a++;
   q++;
}

这就是第四个第三位被复制的原因。

maximal munch algorithm可能会为您提供一些解决此问题的更简洁方法的灵感。它用于标记,但它可能会有所帮助。祝你好运!