筆試題II

中國電信

20道單選(40)+5道多選(20)+三道編程(40)
選擇題考察:數據結構,操作系統,數據庫,linux,擁塞控制等
編程題:
1)字符串排序
編寫一個程序,將輸入字符串中的字符按如下規則排序。
規則1:英文字母從A到Z排列,不區分大小寫。
如,輸入:Type 輸出:epTy
規則2:同一個英文字母的大小寫同時存在時,按照輸入順序排列。
如,輸入:BabA 輸出:aABb
規則3:非英文字母的其它字符保持原來的位置。
如,輸入:By?e 輸出:Be?y
樣例:
輸入:
A Famous Saying: Much Ado About Nothing
輸出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy
這道題考察穩定排序 冒泡,直接插入,歸併。
思路:
a)提取字符串中的字母字符成爲一個新的數組,用冒泡排序
b)順序輸出排序後的字符,如果該位置是非字母字符,則輸出對應位置的非字母字符。

void mySortString() {
    string input;
    getline(cin, input);
    char* temp = new char[input.size() + 1];
    int len = 0;
    for (int i = 0; i < input.size(); i++)
        if (isalpha(input[i]))
            temp[len++] = input[i];
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (toupper(temp[j]) > toupper(temp[j + 1]))
                swap(temp[j], temp[j + 1]);
        }
    }
    int j = 0;
    for (int i = 0; i < input.size(); i++) {
        if (isalpha(input[i]))
            cout << temp[j++];
        else
            cout << input[i];
    }
    cout << endl;
}

2)
輸入一個字符串,內有數字和非數字字符,例如:A123x456 17960?302tab5876
將其中連續的數字作爲一個整數,依次存放到一數組a中。例如,123存放在a[0],456存放在a[1]。。。。統計共有多少個整數,並輸出這些數。
其實有個偷懶的方法,不用轉換成數字,直接輸出字符就好了。
這裏還是轉了數字的

void getNUmOfString() {
    string input;
    getline(cin, input);
    vector<int> ans;
    for (int i = 0; i < input.size(); i++) {
        if (input[i] >= '0'&&input[i] <= '9') {
            int num = input[i] - '0';
            ++i;
            while (input[i] >= '0'&&input[i] <= '9') {
                num = num * 10 + input[i] - '0';
                ++i;
            }
            ans.push_back(num);
        }
    }
    for (int i = 0; i < ans.size() - 1; i++)
        cout << ans[i] << " ";
    cout << ans[ans.size() - 1] << endl;
}

3)數組排序
對一個數組按從小到大排序,並按數組中原來的順序輸出它排序後的次序,相同元素次序一樣。
a)對原數組保存一份拷貝後再排序
b)用map保存排序後的次序。
c)遍歷原數組的拷貝,對應元素在map中找到它的次序並輸出。

void printOrder() {
    int n;
    cin >> n;
    int* data = new int[n];
    int* temp = new int[n];
    for (int i = 0; i < n; i++) {
        cin >> data[i];
        temp[i] = data[i];
    }
    sort(data, data + n);
    unordered_map<int, int> order;
    int j = 1;
    order[data[0]] = 1;
    for (int i = 1; i < n; i++) {
        if (data[i] != data[i - 1]) {
            ++j;
            order[data[i]] = j;
        }       
    }
    for (int i = 0; i < n; i++) 
        cout << order[temp[i]] << " ";
    cout << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章