题目描述
对给定的一个字符串,找出有重复的字符,并给出其位置,如: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;
}