zoukankan      html  css  js  c++  java
  • 题目1199:找位置【字符串】

    题目描述:

    对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12
    输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

    输入:

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

    输出:

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

    样例输入:
    abcaaAB12ab12
    样例输出:
    a:0,a:3,a:4,a:9
    b:1,b:10
    1:7,1:11
    2:8,2:12
    提示:

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

    解题思路

    刚开始不知道怎么设计数据结构、存储方式   

    先在用的是,先用string存储字符串,从头开始遍历字符串,对于第一个字符,找到后面和它相等的所有字符串的位置,并记录、标记,如果总数大于1则输出。

    若第n个字符已经被标记   说明前n-1个字符中有和它相同的字符,且已统计   所以跳过该字符  

     1 #include<stdio.h>
     2 #include<string>
     3 #include<string.h>
     4 #include<iostream>
     5 #include<string>
     6 #include<vector>
     7 using namespace std;
     8 int f[105];//标记数组
     9 string str;//当前字符串 
    10 int main(){
    11     while(getline(cin,str)){
    12         memset(f,0,sizeof(f));
    13         for(int i=0;i<str.size();i++){
    14             if(f[i]==1) continue;//该字符已经统计过
    15             vector<int> v;
    16             v.push_back(i);
    17             for(int j=i+1;j<str.size();j++){
    18                 if(str[j]==str[i]){
    19                     f[j]=1;
    20                     v.push_back(j);
    21                 }
    22             }
    23             if(v.size()>1){
    24                 for(int j=0;j<v.size();j++){
    25                     if(j!=0) cout<<",";
    26                     cout<<str[i]<<":"<<v[j];
    27                 }
    28                 cout<<endl;
    29             }
    30         }
    31     }
    32      
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    magento 去掉index.php
    TCP三次握手与四次挥手
    <Jper和Iperf>的安装及使用
    【Python】安装方法小结
    【ubuntu】日常网络配置信息的查看及修改
    DNS解析
    【Dig工具】
    【ping/tracert】的简单使用
    【VMvare】yum在线源
    配置文件加载
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6813816.html
Copyright © 2011-2022 走看看