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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Cacerine 于 2014-7-15 08:43 编辑

计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”...
这个题目我纠结了一下都没有思路,来论坛求帮忙
还有一个题目
文本文件中存储了多个文章标题、作者,标题和作者之间用若干空格(数量不定)隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10,如果超过10,则截取长度8的子串并且最后添加“...”,加一个竖线后输出作者的名字。
这个是用控制台应用程序吗????求帮忙,捋思路!

评分

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

查看全部评分

33 个回复

倒序浏览
本帖最后由 _xixi_ 于 2014-7-14 10:53 编辑

第一道题,先将字符串全部转换为小写,写个循环,删除当前字符,记录下字符,在删除后的字符中查找,找到的话加1,循环直到字符串长度为0停止;第一道题我还真去做了~~
  1. namespace FindTheSame
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             string str = "Welcome to Chinaworld";

  8.             str = str.ToLower();
  9.             while(str.Length>0)
  10.             {
  11.                 int sum = 1;
  12.                 char current = str[0];
  13.                 str = str.Remove(0, 1);
  14.                
  15.                 while (str.Contains(current))
  16.                 {
  17.                     str = str.Remove(str.IndexOf(current), 1);
  18.                     sum++;
  19.                 }
  20.                 Console.Write("{0}:{1}  ", current, sum);
  21.             }
  22.             Console.ReadKey();
  23.         }
  24.     }
  25. }
复制代码

第二道题,先读取文本,file.readallline(),这样会得到一个string数组,每一项都是文本里面的一行,对每个string进行处理,str.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);这样str[0]就是标题了,判断长度,然后截取(substring),然后~~~这是我的思路而已。

点评

不好意思,下面的原型写错了,是bool IEnumerable<char>.Contains(char value),这个可以把输入光标放在Contians方法括号内,按Ctrl+Shift+空格 查看  发表于 2014-7-14 17:22
public bool Contains(string value),参数是string类型,你传入的current是char类型,不会隐式转换成string类型  发表于 2014-7-14 16:53
不会哦,这里的是判断 str 这个字符串里面是否存在 current 这个字符,返回值是 bool 类型的,方法原型是:public bool Contains(string value)  发表于 2014-7-14 13:52
兄台你的while (str.Contains(current))这句话应该改成 while (str.Contains(current).ToString()),不然编译器提示无法将char类型隐式转换成string类型  发表于 2014-7-14 12:57

评分

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

查看全部评分

回复 使用道具 举报
我刚做的:
//计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”……
        static void Main(string[] args)
        {
            String cstr = "Welcome to Chinaworld";
            String Letter = "abcdefghijklmnopqrstuvwxyz";
            String wstr = "";
            int count = 0;

            for (int n = 0; n < Letter.Length; n++)
            {
                wstr = Letter[n].ToString();
                for (int i = 0; i < cstr.Length; i++)
                {
                    if (Letter[n] == cstr[i] || Letter[n] == cstr[i] + 32)
                    {
                        count++;
                    }
                }

                if(count != 0)
                {
                    Console.WriteLine(wstr + " " + count.ToString());
                    count = 0;
                }
            }
            Console.ReadLine();
        }

评分

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

查看全部评分

回复 使用道具 举报
用Dictionary<TKey, TValue> Class
回复 使用道具 举报
路过,学习一下
回复 使用道具 举报
第一题:用Dictionary
第二题:Substring
回复 使用道具 举报
本帖最后由 Cacerine 于 2014-7-14 16:41 编辑

谢谢楼上各位的帮忙,不过我用自己的方法写出来啦!
  1. static void Main(string[] args)
  2.         {
  3.             string str = "Welcome to Chinaworld";
  4.             //将字符串的格式转换为小写
  5.             str = str.ToLower();
  6.             //因为需要改变str的值,所以转换成为了一个char数组
  7.             char[] c = str.ToCharArray();
  8.             for (int i=0; i < c.Length; i++)
  9.             {
  10.                 //判断当前位置的下标是否为空格,如果不是空格,则进入比较的循环
  11.                 if (c[i] != ' ')
  12.                 {
  13.                     //定义接收次数的变量count
  14.                     int count = 1;
  15.                     //因为是顺序比较,比较可以从当前位置向后来进行比较
  16.                     for (int j = i + 1; j < c.Length; j++)
  17.                     {
  18.                         //如果当前位置的字符与后面的字符相等
  19.                         if (c[i] == c[j])
  20.                         {
  21.                             //那么次数+1
  22.                             count++;
  23.                             //并把与当前位置下标字符相等的比较字符设置为空格,避免出现重复
  24.                             c[j] = ' ';
  25.                         }
  26.                     }
  27.                     Console.Write("\"{0} {1}\"  ", c[i], count);
  28.                 }
  29.             }
  30.             Console.ReadKey();
  31.         }
复制代码



评分

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

查看全部评分

回复 使用道具 举报
_xixi_ 发表于 2014-7-14 10:51
第一道题,先将字符串全部转换为小写,写个循环,删除当前字符,记录下字符,在删除后的字符中查找,找到的 ...

你的思路跟我昨天想的一样,不过你的函数我不太会用,最后还是用最简单的for循环做出来了!
在下面,你可以看一下
回复 使用道具 举报
StartHeiMa 发表于 2014-7-14 12:04
我刚做的:
//计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“ ...

额,这个功能可以实现,我用了最简单的for循环做出来了,在下面,你看一下,有没有打开你的思路!
回复 使用道具 举报
Cacerine 发表于 2014-7-14 16:45
你的思路跟我昨天想的一样,不过你的函数我不太会用,最后还是用最简单的for循环做出来了!
在下面,你可 ...

这样子少计算了空格字符哦,不要替换成空格了,换个其他的应该就行了
回复 使用道具 举报
_xixi_ 发表于 2014-7-14 16:52
这样子少计算了空格字符哦,不要替换成空格了,换个其他的应该就行了

空格字符也要吗????
我以为只要字符,去掉空格!!!!!
回复 使用道具 举报
当有人给你回复后,请及时把帖子编辑为提问结束,这样版主才给你加分
回复 使用道具 举报
muyyi 中级黑马 2014-7-14 20:26:42
13#
说下思路,第一题
用for遍历这个字符串
将遍历到的字符与其他每一个字符做比较,相同的时候计数器+1
也就是双重循环
注意可能出现的重复问题,比如最后结果只输出一次W 2,这可以用index值来区分,如果相同的字符出现在当前字符的前面,那么就证明不是第一次出现了,直接跳出本次循环
最后,不区分大小写应该没什么问题吧,统一转化为大写或小写再计数

第二题
截取字符串请参考substring方法

如果LZ实在看了思路还不清楚,我可以放下我当初做的源代码
不过还是请先自己思考吧

评分

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

查看全部评分

回复 使用道具 举报
第一题, 你看下Dictionary字典这个泛型集合的用法,这题是用这种键值对集合来做的。
回复 使用道具 举报
本帖最后由 c19t043 于 2014-7-16 08:50 编辑

首先来看第一题,
计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”...
我基础差,我就会用数组——2个数组,2个for循环完成这题
    class Program
    {
        static void Main(string[] args)
        {
            //计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”...
            string str1 = "Welcome to Chinaworld";
            Console.WriteLine(str1);
            str1 = str1.ToLower();
            //将原字符串,转换为,单个字符数组char1
            char[] char1 = str1.ToArray();
            //记录对应索引下,该字符出现过的次数
            char[] char2 = new char[char1.Length];
            for (int i = 0; i <= char1.Length - 1; i++)
            {
                int count = 0;
                for (int j = 0; j <= char1.Length - 1; j++)
                {
                    if (char1 == char1[j])
                    {
                        count++;
                    }
                }
                char2 = Convert.ToChar(count);
            }
            //打印数组char1,每种字符出现的次数,如果数组char1中有相同字符,只打印一次
            for (int i = 0; i <= char1.Length - 1; i++)
   
         {
                if (char1 != ' ')
                {
                    for (int j = 0; j <= i; j++)
                    {
                        if (char1 == char1[j] && j < i) //将char1[j]与它前面的字符比较,如果有相同就退出该循环
                        {
                            break;
                        }
                        else if (j == i)//与之前的字符比较后,仍然没相同的就输出该字符
                        {
                            Console.WriteLine(char1.ToString() + Convert.ToInt32(char2));
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }

回复 使用道具 举报
我是来学习的
回复 使用道具 举报
本帖最后由 专属第三 于 2014-7-16 11:48 编辑
  1. string s = "Welcome to Chinaworld";
  2.             int ecishu = 0;
  3.            ecishu= System.Text.RegularExpressions.Regex.Matches(s, "[Ww]").Count;

  4.            Console.WriteLine("w"+" "+ecishu);
  5.            Console.ReadKey();
复制代码
基础加强里边有正则表达式,好像是第15个.
回复 使用道具 举报
专属第三 发表于 2014-7-16 11:43
基础加强里边有正则表达式,好像是第15个.学习C#完全就是为了就业,而你就业的时候只掌握基本知识来做题可以 ...

?????你这是..................
回复 使用道具 举报
_xixi_ 发表于 2014-7-14 10:51
第一道题,先将字符串全部转换为小写,写个循环,删除当前字符,记录下字符,在删除后的字符中查找,找到的 ...

这个方法很不错啊 不过14行可以去掉吧 直接初始化sum=0 结果也是一样的 这样写代码有点重复
回复 使用道具 举报
好多方法啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马