任务:32核处理器编号,解析。

  • 输入:1,2,3,4-9,11,23-26 字符串形式
  • 输出:1,2,3,4,5,6,7,8,9,11,23,24,25,26 到指定整型数组
  • 规则:数字从小到大顺序输入,返回处理器核心编号。

cpp Code
//未使用库函数,遍历字符串每个字符,做处理
//有四种情况,一种是单数字,第二种是 '-' 后的数字,第三种是 ',' ,第四种是 '-'

#include<iostream>
#include<cstdlib>
using namespace std;

int adaptCoreID(const char* c_str, unsigned int* c_end) {
    int index = 0;
    int strIndex = 0;
    string sl = "";
    string sr = "";
    bool flag = false;
    while (c_str[strIndex]) {
        if ((c_str[strIndex] != ',' && c_str[strIndex] != '-')
            && flag == false) {
            sl += c_str[strIndex];
        }
        else if ((c_str[strIndex] != ',' && c_str[strIndex] != '-')
            && flag == true) {
            sr += c_str[strIndex];
        }
        else if (c_str[strIndex] == '-') {
            flag = true;
        }
        else if (c_str[strIndex] == ',') {
            if (sl != "" && sr == "") {
                unsigned int slInt = std::atoi(sl.c_str());
                c_end[index++] = slInt;
            }
            else if (sl != "" && sr != "") {
                unsigned int slInt = std::atoi(sl.c_str());
                unsigned int srInt = std::atoi(sr.c_str());
                for (unsigned int j = slInt; j <= srInt; j++) {
                    c_end[index++] = j;
                }
            }
            sl = "";
            sr = "";
            flag = false;
        }
        strIndex++;
    }
    if (sl != "" && sr == "") {
        unsigned int slInt = std::atoi(sl.c_str());
        c_end[index++] = slInt;
    }
    else if (sl != "" && sr != "") {
        unsigned int slInt = std::atoi(sl.c_str());
        unsigned int srInt = std::atoi(sl.c_str());
        for (unsigned int j = slInt; j <= srInt; j++) {
            c_end[index++] = j;
        }
    }
    return index;
}
int main() {
    const char *c_str = "2,3-4,6,11-15,17-22,26";
    //char *c_str1 = "0";
    //char *c_str2 = "";
    unsigned int c_endCopy[32];
    unsigned int *c_end = c_endCopy;
    int index = adaptCoreID(c_str, c_end);
    //测试
    for (int i = 0; i < index; i++) {
        cout << c_end[i] << "  ";
    }
    system("pause");
    return 0;
}
Java Code
public class Comba {
    static int adaptCoreID(final String c_str, int[] c_end) {
        int index = 0;
        String[] c_strSplit = c_str.split(",");
        for (int i = 0; i < c_strSplit.length; i++) {
            if (!find(c_strSplit[i])) {
                c_end[index++] = Integer.valueOf(c_strSplit[i]);
            } 
            else {
                String[] innerSplit = c_strSplit[i].split("-");
                int start = Integer.valueOf(innerSplit[0]);
                int end = Integer.valueOf(innerSplit[1]);
                for (int j = start; j <= end; j++) {
                    c_end[index++] = j;
                }
            }
        }
        return index;
    }

    public static boolean find(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '-') {
                return true;
            }
        }
        return false;
    }

    //主函数测试
    public static void main(String[] args) {
        String s = "1,5-9,16,22,23-25";
        String s1 = "0";
        int[] c_end = new int[32];
        int index = adaptCoreID(s, c_end);
        for (int i = 0; i < index; i++) {
            System.out.print(" " + c_end[i]);
        }
    }
}