首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求个C#处置字符串的算法

2013-12-10 
求个C#处理字符串的算法原字符串:string bedString1 大床(200cm*250cm)双床(182cm*200cm)string bedS

求个C#处理字符串的算法
原字符串:
string bedString1 = "大床(200cm*250cm)  双床(182cm*200cm)";
string bedString2 = "大床(200cm*258cm)  双床";
string bedString3 = "大床(200cm*250cm)";


期望处理后的结果:
大床(2m*2.5m) 双床(1.8m*2m)
大床(2m*2.6m)  双床
大床(2m*2.5m) 

要求:
1.将全角括号转换成半角
2.200cm处理为2m, 182cm处理为1.8m,258cm处理为2.6m(四舍五入,保留一位小数,如果是2.0,显示为2)
3.床型长宽不定
4.循环中处理的,效率越高越好
[解决办法]
你查找单位‘cm’,再取出对应3位数字,除100,再四舍五入,再替换
[解决办法]
效率最高的办法:
1、找原字符串的格式规律
2、编写正则表达式
3、一次性抽出你要转换的各参数(然后替换成你想要的)

笨办法:
字符替换
[解决办法]
本帖最后由 caozhy 于 2013-12-07 16:38:44 编辑

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string bedString1 = "大床(200cm*250cm)  双床(182cm*200cm)";
            string result = Regex.Replace(bedString1, @"((\d+)cm\*(\d+)cm)", new MatchEvaluator(m => string.Format("({0}m*{1}m)", (double)((Convert.ToInt32(m.Groups[1].Value) + 5) / 10) / 10.0, (double)((Convert.ToInt32(m.Groups[2].Value) + 5) / 10) / 10.0)));
            Console.WriteLine(result);
        }
    }
}

热点排行