A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗志强 中级黑马   /  2013-3-9 13:22  /  3257 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗志强 于 2013-3-9 16:57 编辑

比如说一个字符串:“123123112355··【】【【【】】】、、。。。///aaaxxzxxx”

如果字符串后面那个跟前面那个是一样的,则只保留一个,

例如:112233aaaaaxxxx   得到的结果是123ax   但是有一点哈   就是字符串里面的字符是不确定的是未知的

如果能做出来的,请贴上代码。。。。谢谢,讲思路,可能我还是不知道怎么做。






PS:这个你们说用正则我还觉得靠谱些,如果是冒泡之类的,太不靠谱的,我一测试就知道结果肯定不对


评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

16 个回复

倒序浏览

回帖奖励 +100

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 结构
{
    class Program
    {
        static void Main(string[] args)
        {
            //List用于存储从数组里取出来的不相同的元素List<string> listString = new List<string>()
            string[] stringArray = { "aaa", "bbb", "aaa", "ccc", "bbb", "ddd", "ccc", "aaa", "bbb", "ddd" };
            List<string> listString = new List<string>();
            foreach (string eachString in stringArray)
            {
               
                if (!listString.Contains(eachString))
                    listString.Add(eachString);
            }//最后从List里取出各个字符串进行操作  
            foreach (string eachString in listString)
            {
                Console.Write(eachString); //打印每个字符串}
            }
            Console.ReadLine();
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
先占楼,再考虑
回复 使用道具 举报
说思路吧:

定义一个字符串数组s ,就是你写的那一串无序的字符串数组
定义一个字符串j,用来接收分离出来的字符串
然后用 for 循环
挨个字符串试
假如下一个字符串等等于上一个,就忽略
假如不等于,就定义为一个新的字符串j1,j2,j3,j4...
最后将这些字符串连接起来



评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
开始是想用字符串的 但是不能用foreach了;凑合吧!
回复 使用道具 举报
本帖最后由 岳珅 于 2013-3-9 14:03 编辑

用的明杰兄的方法。。。有点小BUG,偶修正了一下,现在OK了-0-
  1.         static void Main(string[] args)
  2.         {
  3.             string str1 = "aabbceeee";

  4.             List<char> str = new List<char>();

  5.             for (int j = 0; j < str1.Length-1; j++)
  6.             {
  7.                 if (str1[j] != str1[j + 1])//bug由此产生,因为前面循环条件是str1.Length-1,所以- -最后一个字符是不会被循环到的- -所以出现了问题。
  8.                 {
  9.                     if (!str.Contains(str1[j]))
  10.                     {
  11.                         str.Add(str1[j]);
  12.                     }
  13.                 }
  14.             }
  15.             if (!str.Contains(str1[str1.Length - 1]))//加上这个- -bug就修复好了- -
  16.             {
  17.                 str.Add(str1[str1.Length - 1]);
  18.             }
  19.             foreach (char item in str)
  20.             {
  21.                 Console.Write(item);
  22.             }
  23.             Console.ReadKey();
  24.         }
复制代码
这样,输出的就是abce

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
李贤贤 发表于 2013-3-9 13:45
using System;
using System.Collections.Generic;
using System.Linq;

汗  应该要手动加金币  让你白赚了。。。。。而且你这种方法根本就不对
回复 使用道具 举报
岳珅 发表于 2013-3-9 14:01
用的明杰兄的方法。。。有点小BUG,偶修正了一下,现在OK了-0-这样,输出的就是abce

...

错错错~!~~~他的我已经说过~是错的
回复 使用道具 举报
罗志强 发表于 2013-3-9 14:30
错错错~!~~~他的我已经说过~是错的

= =你试试嘛~不错的,偶改了下,现在可以了噻- -
最起码他的思路还是棒棒的- -
回复 使用道具 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "112233aaaaaxxxx";
            string tmpstr = "";
            string newstr = "";
            for (int i = 0; i < str.Length; i++)
            {
                string ch = str[i].ToString(); ;



                if (tmpstr != "")
                {
                    if (tmpstr.IndexOf(ch) >= 0)                    //判断是否存在
                        continue;
                }
                    tmpstr = tmpstr + ch;                           //将不存在的添加到字符串中


                if (newstr == "")
                    newstr = ch ;
                else
                    newstr = newstr + ch ;


            }

            Console.WriteLine(newstr);
            Console.ReadKey();

        }
    }
}

1.png (24.66 KB, 下载次数: 173)

1.png

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
赵文博 发表于 2013-3-9 15:23
using System;
using System.Collections.Generic;
using System.Linq;

哥们~~~这题不简单.....你的也不行

回复 使用道具 举报
岳珅 发表于 2013-3-9 14:47
= =你试试嘛~不错的,偶改了下,现在可以了噻- -
最起码他的思路还是棒棒的- - ...

汗~~~他那冒泡我早就给否定了。。。他这样是会把所有重复的都去掉了
比如哈:
1122333333331111122222222311111111
他那方法打印肯定是123    你觉得呢
我要的是1231231
回复 使用道具 举报
朱传波 发表于 2013-3-9 13:56
说思路吧:

定义一个字符串数组s ,就是你写的那一串无序的字符串数组

你这跟冒泡是一样的,如果前面出现过了。后面的如果在出现就不会打印出来是吧

12112223331112233
如果按你的这思路   打印应该是123    但是我想要的是12123123
回复 使用道具 举报
罗志强 发表于 2013-3-9 16:56
你这跟冒泡是一样的,如果前面出现过了。后面的如果在出现就不会打印出来是吧

12112223331112233
  1.             static void Main(string[] args)
  2.             {
  3.                 string str1 = "1112233331123333aaasa";

  4.                 List<char> str = new List<char>();

  5.                 for (int j = 1; j < str1.Length-1; j++)
  6.                 {
  7.                     if (str1[j] != str1[j +1])
  8.                     {
  9.                             str.Add(str1[j]);
  10.                     }
  11.                 }
  12.                 if (str.Contains(str1[str1.Length - 1]))
  13.                 {
  14.                     str.Add(str1[str1.Length-1]);
  15.                 }
  16.                 Console.WriteLine("原字符串为:"+str1);
  17.                 Console.Write("处理后的字符串为:");
  18.                 foreach (char item in str)
  19.                 {
  20.                     Console.Write(item);
  21.                 }
  22.                 Console.ReadKey();
  23.             }
复制代码
好吧,按照你的要求- -偶又改了下下,我输入的字符串是1112233331123333aaasa
输出的是
完美符合你的要求了吧- -
回复 使用道具 举报
赵文博 发表于 2013-3-9 15:23
using System;
using System.Collections.Generic;
using System.Linq;

我这的结果是下面这样的,不行你把循环的时候把空格过滤掉不就得了

1.png (14.22 KB, 下载次数: 114)

1.png
回复 使用道具 举报
本帖最后由 曾玉锋 于 2013-3-9 22:06 编辑

代码在楼下
回复 使用道具 举报
额,楼主这需求....没意思了  去重复嘛。(刚理解错了,改正如下)代码如下哈:

            string str = "111aa13434222211333344334455555";
            string newStr =str[0].ToString();//创建一个新字符串,并赋初值为str[0]
            int index = 0;//索引,用于记录newStr中的最后一个字符的索引
            for (int i = 0; i < str.Length; i++)
            {
                if (newStr[index]!=str[i])//进行比较,如果str[i]和newStr[index]相同则忽略,否则加到newStr上
                {
                    newStr += str[i];
                    index++;
                }
            }
            Console.WriteLine(newStr);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马