超级难题(关于字符串分解) string x = "1dd哈哈哈哈23哈哈哈哈";MessageBox.Show(x.Substring(0,10));可以啊.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //试试我的笨方法:string s = "122哈哈哈哈11哈哈哈哈哈哈哈";//+5 是四舍五入string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)+5)/10];int j = 0; int k = 0;for (int i=0; i<s.Length; i++) { if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) { j += 2; } else { j ++; } if (j >10) {k++; j -= 10;} _s[k] += s[i];} 刚才在看电影突然想到这个程序有问题:string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)+5)/10];可以考虑改成(因为有可能是21-24 bytes)string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)-1)/10+1];或者最保险的(因为你要求9 有可能当10 用,多个的话就可能超出索引)string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];这个环节建议自己再根据情况增加一个方法来检测,比如在上面的:if (j >10) {k++; j -= 10;}加一个if (k>_s.Length) { 重新生成一个新的string[] 然后用array.copy 过去 // try this:string s = "122哈哈哈哈11哈哈哈哈哈哈哈";string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];int j = 0; int k = 0;for (int i=0; i<s.Length; i++) { if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) { j += 2; } else { j ++; } if (j >10) {k++; j -= 10;} _s[k] += s[i];}string[] s_ = new string[k];Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果 //晕,上面的程序没有调试,k要++ 才行,这个是通过的string s = "122哈哈哈哈11哈哈哈哈哈哈哈";string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];int j = 0; int k = 0;for (int i=0; i<s.Length; i++) { if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) { j += 2; } else { j ++; } if (j >10) {k++; j -= 10;} _s[k] += s[i];}string[] s_ = new string[++k];Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果 扫描第N次子字符串,判断ASCLL小于160的字节的奇偶性,如果为奇数,把该子串最后一字节放入余下的串中,如此循环即可。 有必要这么复杂吗?而且如果系统默认的编码不支持中文呢?如果从速度考虑,这不免太发时间了吗?我倒觉得,可以从另一种角度考虑,如果字符范围是0-255,宽度是1,否则,宽度是2。static String[] Split(String str, int wid) { ArrayList list = new ArrayList((str.Length + 4) / 5); int cc = 0, start = 0; for (int i = 0; i < str.Length; i++) { cc += (str[i] <= 255 ? 1 : 2); if (cc >= wid) { if (cc > wid) { i--; } list.Add(str.Substring(start, i - start + 1)); start = i + 1; cc = 0; } } if (cc > 0) { list.Add(str.Substring(start)); } return (String[]) list.ToArray(typeof(String));}例子:String[] str = Split("122哈哈哈哈11哈哈哈哈哈哈哈", 10);for (int i = 0; i < str.Length; i++) Console.WriteLine(str[i]); sevelet是微软提出来的吗? 关于VS2008的一个问题,大家帮帮忙 请教一个winform的问题 xbap调用web services问题 有时候成功,有时候失败!我自己都搞不清哪里错了~急救~ 内网需要代理环境的情况下,smtpclient可用否? 关于类继承的问题 请教关于WinForm里面DataGrid行列的操作! 能否让ASP.NET中的image控件根据我生成的image类来显示相应的图片? 用什么软件可以修改exe的标题,改成自己想的标题,没有源码? sql语句在Oracle出错。高手请进! 还是“自动对时系统”问题,如何实现自动对时
//+5 是四舍五入
string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)+5)/10];
int j = 0; int k = 0;
for (int i=0; i<s.Length; i++) {
if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
j += 2;
} else {
j ++;
} if (j >10) {k++; j -= 10;} _s[k] += s[i];
}
int j = 0; int k = 0;
for (int i=0; i<s.Length; i++) {
if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
j += 2;
}
else {
j ++;
} if (j >10) {k++; j -= 10;} _s[k] += s[i];
}string[] s_ = new string[k];
Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果
int j = 0; int k = 0;
for (int i=0; i<s.Length; i++) {
if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
j += 2;
}
else {
j ++;
} if (j >10) {k++; j -= 10;} _s[k] += s[i];
}string[] s_ = new string[++k];
Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果
static String[] Split(String str, int wid) {
ArrayList list = new ArrayList((str.Length + 4) / 5);
int cc = 0, start = 0;
for (int i = 0; i < str.Length; i++) {
cc += (str[i] <= 255 ? 1 : 2);
if (cc >= wid) {
if (cc > wid) {
i--;
}
list.Add(str.Substring(start, i - start + 1));
start = i + 1;
cc = 0;
}
}
if (cc > 0) {
list.Add(str.Substring(start));
}
return (String[]) list.ToArray(typeof(String));
}
例子:
String[] str = Split("122哈哈哈哈11哈哈哈哈哈哈哈", 10);
for (int i = 0; i < str.Length; i++)
Console.WriteLine(str[i]);