黑马程序员技术交流社区

标题: 字符串的处理.....求解 [打印本页]

作者: 罗志强    时间: 2013-3-9 13:22
标题: 字符串的处理.....求解
本帖最后由 罗志强 于 2013-3-9 16:57 编辑

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

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

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

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






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



作者: 李贤贤    时间: 2013-3-9 13:45
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();
        }
    }
}


作者: 朱传波    时间: 2013-3-9 13:49
先占楼,再考虑
作者: 朱传波    时间: 2013-3-9 13:56
说思路吧:

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




作者: 李贤贤    时间: 2013-3-9 13:57
开始是想用字符串的 但是不能用foreach了;凑合吧!
作者: 岳珅    时间: 2013-3-9 14:01
本帖最后由 岳珅 于 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


作者: 罗志强    时间: 2013-3-9 14:28
李贤贤 发表于 2013-3-9 13:45
using System;
using System.Collections.Generic;
using System.Linq;

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

...

错错错~!~~~他的我已经说过~是错的
作者: 岳珅    时间: 2013-3-9 14:47
罗志强 发表于 2013-3-9 14:30
错错错~!~~~他的我已经说过~是错的

= =你试试嘛~不错的,偶改了下,现在可以了噻- -
最起码他的思路还是棒棒的- -
作者: 赵文博    时间: 2013-3-9 15:23
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, 下载次数: 167)

1.png

作者: 罗志强    时间: 2013-3-9 16:52
赵文博 发表于 2013-3-9 15:23
using System;
using System.Collections.Generic;
using System.Linq;

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


作者: 罗志强    时间: 2013-3-9 16:54
岳珅 发表于 2013-3-9 14:47
= =你试试嘛~不错的,偶改了下,现在可以了噻- -
最起码他的思路还是棒棒的- - ...

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

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

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

12112223331112233
如果按你的这思路   打印应该是123    但是我想要的是12123123
作者: 岳珅    时间: 2013-3-9 17:43
罗志强 发表于 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 18:49
赵文博 发表于 2013-3-9 15:23
using System;
using System.Collections.Generic;
using System.Linq;

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

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

1.png

作者: 曾玉锋    时间: 2013-3-9 21:51
本帖最后由 曾玉锋 于 2013-3-9 22:06 编辑

代码在楼下

作者: 曾玉锋    时间: 2013-3-9 22:04
额,楼主这需求....没意思了  去重复嘛。(刚理解错了,改正如下)代码如下哈:

            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);





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2