题解 | #找位置#
找位置
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++; } } }
代码能力有限,存在很多问题,请批评指正!