找位置

题目描述

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:

a,1;a,4;a,5;a,10
b,2;b,11
1,8;1,12
2,9;2,13

输入描述:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。

1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。

分析

对于一个字符串的每一个字符,如果在他的后面出现了重复的字符,那么就输出该字符以及字符的位置,并且将该重复字符置为*

#include <iostream>
#include <string>

using namespace std;

int main(){
    string s;
    while(cin >> s){
        for(int i = 0; i < s.size() - 1; i++){
            bool flag = true;// 用来标记是否是重复字符的第一个字符
            if(s[i] == '*') continue;
            for(int j = i + 1; j < s.size(); j++){
                if(s[i] == s[j]){
                   if(flag){
                       cout << s[i] << ":" << i;
                       flag = false;
                   }
                    cout << "," << s[j] << ":" << j;
                    s[j] = '*';
                }
            }
            if(!flag) cout << endl;//这里是如果s[i]有重复并且输出了,那么就换行否则不换行
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhuobo/p/10288535.html