日期:2014-05-17  浏览次数:20734 次

求个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);
        }
    }
}