题解 | #找位置#

找位置

https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150

#include <iostream>
using namespace std;

/**
 * 定义的辅助结构体
 */
struct map {
    char name = '\0';
    int num = 0;
};

/**
 * 找到map数组中是否有对应关键字,若有,则+1,若无,则添加一个对应关键字,再+1
 * 模拟map的功能
 * @param m map数组
 * @param name 关键字
 */
void findAndAdd(map m[], char name) {
    int i = 0;
    while (m[i].name != '\0') {
        if (m[i].name == name) {
            m[i].num++;
            return;
        } else {
            i++;
        }
    }
    m[i].name = name;
    m[i].num++;
}

int main() {
    char arr[100];
    map temp[100];
    while (cin >> arr) {
        int i = 0;
        //初试化temp数组
        while (arr[i] != '\0') {
            findAndAdd(temp, arr[i]);
            i++;
        }
        i = 0;
        //把只出现一次的字符的num变为0,为后面打印做准备
        while (temp[i].name != '\0') {
            if (temp[i].num == 1) {
                temp[i].num = 0;
            }
            i++;
        }
        i = 0;
        //循环遍历temp数组
        while (temp[i].name != '\0') {
            int j = 0;
            //循环遍历arr数组(即字符串)
            while (arr[j] != '\0') {
                if (temp[i].num != 0 && arr[j] == temp[i].name) {   //若num=0且匹配字符串,则打印
                    cout << temp[i].name << ":" << j;
                    temp[i].num--;//为打印逗号做准备
                    if (temp[i].num != 0) {
                        cout << ",";
                    } else {
                        cout << endl;
                    }
                }
                j++;
            }
            i++;
        }
    }
}

代码能力有限,存在很多问题,请批评指正!

全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务