标签: c#

  • C# 生成允许重复的排列、组合

    C# 生成允许重复的排列、组合

    /// <summary>
    /// 获取允许重复的排列组合
    /// </summary>
    /// <param name="s"> 源字符串</param>
    /// <param name="cnt"> 组合位数</param>
    /// <returns> 生成结果</returns>
    static IEnumerable<string > GetVariations(string s)
    {
            int[] indexes = new int[s.Length];
            StringBuilder sb = new StringBuilder ();
    
            while (IncrementIndexes(indexes, s.Length))
            {
                sb.Clear();
                for ( int i = 0; i < indexes.Length; i++)
                {
                        if (indexes[i] != 0)
                        {
                                sb.Append(s[indexes[i] - 1]);
                        }
                }
    
                yield return sb.ToString();
    
            }
    }
    
    static bool IncrementIndexes( int[] indexes, int limit)
    {
            for ( int i = 0; i < indexes.Length; i++)
            {
                indexes[i]++;
                if (indexes[i] > limit)
                {
                        indexes[i] = 1;
                }
                else
                {
                        return true;
                }
            }
            return false;
    }

    排列 和 组合的区别

    排列是有顺序的,如(a,b,c)和(b,c,a)是不同的,虽然同样是三个字母,但顺序不同。

    组合是没有顺序的,如(a,b,c)和(b,c,a)是相同的,只要是同样的字母组合,顺序无所谓。

  • C# 随机生成字符串

    C# 随机生成字符串

    /// <summary>
    /// 生成随机纯字母组合
    /// </summary>
    /// <param name="count"> 位数</param>
    /// <returns> 随机码</returns>
    private string GetRandomString( int count)
    {
            int number;
            string checkCode = String.Empty;     //存放随机码的字符串  
    
            System. Random random = new Random( DateTime.Now.Millisecond * 2);
    
            for ( int i = 0; i < count; i++) //产生4位校验码  
            {
                number = random.Next();
                number = number % 36;
                if (number < 10)
                {
                        number += 48;    //数字0-9编码在48-57  
                }
                else
                {
                        number += 55;    //字母A-Z编码在65-90  
                }
    
                checkCode += (( char)number).ToString();
            }
            return checkCode;
    }
    
    /// <summary>
    /// 按位数取得随机码(纯数字)
    /// </summary>
    /// <param name="num"> 位数</param>
    /// <returns> 随机码</returns>
    public string GetRandomNumber( int num)
    {
            string str = "";
            int seed = Math.Abs((int )BitConverter .ToUInt32(Guid.NewGuid().ToByteArray(), 0));
            Random random = new Random(seed);
    
            for ( int i = 0; i < num; i++)
            {
                str += random.Next(10);
            }
            return str;
    }
    
    /// <summary>
    /// 生成随机字母字符串(数字字母混和)
    /// </summary>
    /// <param name="codeCount"> 待生成的位数 </param>
    public string GetRandomCharAndNumber( int codeCount)
    {
            
        string str = string.Empty;
        int rep = 0;
        long num2 = DateTime.Now.Ticks + rep;
        rep++;
        Random random = new Random((( int)((( ulong)num2) & 0xffffffffL)) | ((int)(num2 >> rep)));
        for ( int i = 0; i < codeCount; i++)
        {
            char ch;
            int num = random.Next();
            if ((num % 2) == 0)
            {
                ch = ( char)(0x30 + (( ushort)(num % 10)));
            }
            else
            {
                ch = ( char)(0x41 + (( ushort)(num % 0x1a)));
            }
            str = str + ch.ToString();
        }
        return str;
    }
  • C#判断中文、日文、韩文

    C#判断中文、日文、韩文的办法:

    中文:/[\u4e00-\u9fa5]/

    日文:/[\u0800-\u4e00]/

    韩文:/[\uac00-\ud7ff]/

    C# 正则表达式应用实例  如果要匹配 所有东亚语言 @"[\u4E00-\u9fa5]"

    // 判断韩语
    if  (System.Text.RegularExpressions.Regex.IsMatch(content, @"^[\uac00-\ud7ff]+$"))
    {
    }
     
    // 判断日语
    if (System.Text.RegularExpressions.Regex.IsMatch(content, @"^[\u0800-\u4e00]+$"))
    {
    }
     
    // 判断中文
    if (System.Text.RegularExpressions.Regex.IsMatch(content, @"^[\u4e00-\u9fa5]+$")) // 如果是中文
    {
    }
  • C#中的@符号详解

    @符号是特殊而又实用的C#符号。

    比如它在string中的应用。

    1

    字符@表示,其后的字符串是个“逐字字符串”(verbatim string)。 // 这个说法来自C# Primer 中文版(Stanley B. Lippman, 侯捷/陈硕合译)

    2

    对于逐字字符串字面变量(verbatim string literal ),我们不再需要使用“转义序列”就可以指定反斜线之类的特殊字符。@的这个特点使得在表示文件路径时很方便。

    如:

    string str = @"C:/Test.txt";

    3

    另外一点,用@表示的字符串能够跨越数行。这数行之内的空白字符(White Space)都会保留在字符串里。

    这样便能允许存储和生成带有格式的文本块。

    如:

    string strText = @"Line1
                       Line2
                       Line3";

    有意思的是如果在VS.NET2003中当你输入完第一行(string strText = @"Line1)换行后,光标会自动到第二行最开头 ^_^。很智能化、人性化的判断。

    4

    不知道大家在最初看到@的功能时有没有想,如果“转义序列”(/)在字符串中“失效”,那么想包含一个双引号(”),怎么办?我找到了答案。

    方法很简单。在双引号之前再加一个双引号即可。

    如:

    string str = @"""Great!""Said Allen Lee";

    5

    这仅仅是@在字符串中的用法,有机会再去看看@的其他东东。

  • C#读写文件

    C#读写文件的方法:

    C#中,在含有转义字符的 字符串前加@可以避免使用转义字符

    使用前要using System.IO;

    StreamReader reader = new StreamReader(@"E:/main.c", Encoding.Default);            
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
    reader.Close();
    // 参数改为false可以直接重写文件
    StreamWriter writer = new StreamWriter(@"E:/main.c", true, Encoding.Default);
    writer.WriteLine("ok..");
    writer.Close();