首页 新闻 会员 周边

一个很急的问题.NET的 大神们帮帮忙啊

0
悬赏园豆:40 [已解决问题] 解决于 2010-11-25 08:22

在C#中 汉字占位1个字符 在C中占位2个

现在要求输入60个字符 也就是说 我在 C#中 输入“一句话”是3个字符

但是在C中是6个 那么 现在需要从 C#中进行判断 进入到C 中 必须满足60个字符 不够的字符补充一些空格进行占位 我需要补充44个空格 一个空格1位字符 

这个 程序怎么写 急急啊

问题补充: 还有就是 一开始使用VC++做的 他的汉字字符是占2位 但是现在 我要用 C# 做 然后在 转到VC++中 C#里面 汉字字符占1位 现在要求 补充空格啊
Fallen Angel.的主页 Fallen Angel. | 初学一级 | 园豆:5
提问于:2010-11-24 09:57
< >
分享
最佳答案
0

using System;
using System.Text;

class Program
{
// 右对齐字符串中的字符,在左边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。
static string CPadLeft(string s, int totalWidth)
{
int slen = Encoding.GetEncoding("GB18030").GetByteCount(s);
if (slen >= totalWidth) return s;
return new string(' ', totalWidth - slen) + s;
}

// 左对齐字符串中的字符,在右边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。
static string CPadRight(string s, int totalWidth)
{
int slen = Encoding.GetEncoding("GB18030").GetByteCount(s);
if (slen >= totalWidth) return s;
return s + new string(' ', totalWidth - slen);
}

static void Main()
{
string input = "一句话";
Console.WriteLine(
"[{0}]", CPadLeft (input, 10));
Console.WriteLine(
"[{0}]", CPadRight(input, 10));
}
}

 

收获园豆:40
空军 | 菜鸟二级 |园豆:270 | 2010-11-24 10:33
// 也可以使用扩展方法: using System; using System.Text; static class ExtensionMethods { // 右对齐字符串中的字符,在左边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。 public static string CPadLeft(this string s, int totalWidth) { int slen = Encoding.GetEncoding("GB18030").GetByteCount(s); if (slen >= totalWidth) return s; return new string(' ', totalWidth - slen) + s; } // 左对齐字符串中的字符,在右边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。 public static string CPadRight(this string s, int totalWidth) { int slen = Encoding.GetEncoding("GB18030").GetByteCount(s); if (slen >= totalWidth) return s; return s + new string(' ', totalWidth - slen); } } static class Program { static void Main() { string input = "一句话"; Console.WriteLine("[{0}]", input.CPadLeft (10)); Console.WriteLine("[{0}]", input.CPadRight(10)); } }
空军 | 园豆:270 (菜鸟二级) | 2010-11-24 10:42
感谢你的回答 但是 你这个控制台应用程序 我 用了下 但是 我看不出去切他的占位
Fallen Angel. | 园豆:5 (初学一级) | 2010-11-24 11:31
其他回答(4)
0

判断字条长度(C#):

System.Text.Encoding.Default.GetByteCount(strString)

通过上面的方法,“一句话”的占位就是6个字符了

另外“一句话”在C#中占位也是6个字符。。。

Tester Chen | 园豆:1690 (小虾三级) | 2010-11-24 10:11
我先试用下
支持(0) 反对(0) Fallen Angel. | 园豆:5 (初学一级) | 2010-11-24 11:31
strString是参数,获得结果类型是int 其实,在楼下各位的代码中,也就是这一句最为重要。。。
支持(0) 反对(0) Tester Chen | 园豆:1690 (小虾三级) | 2010-11-24 11:33
0

如果用utf-8编码,一个中文、英文字符都占两个字节。

 

一个参考方法:

using System.Text.RegularExpressions;
using System.Text;

/// <summary>
/// 字符串长度(按字节算)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
static int StrLength(string str)
{
int len = 0;
byte[] b;

for (int i = 0; i < str.Length; i++)
{
b
= Encoding.Default.GetBytes(str.Substring(i,1));
if (b.Length > 1)
len
+= 2;
else
len
++;
}

return len;
}

/// <summary>
/// 截取指定长度字符串(按字节算)
/// </summary>
/// <param name="str"></param>
/// <param name="length"></param>
/// <returns></returns>
static string StrCut(string str, int length)
{
int len = 0;
byte[] b;
StringBuilder sb
= new StringBuilder();

for (int i = 0; i < str.Length; i++)
{
b
= Encoding.Default.GetBytes(str.Substring(i, 1));
if (b.Length > 1)
len
+= 2;
else
len
++;

if (len >= length)
break;

sb.Append(str[i]);
}

return sb.ToString();
}

 

邀月 | 园豆:25475 (高人七级) | 2010-11-24 10:12
0

深入理解字符、字节。

所谓字符,如‘A’,是显示给人看的。在计算机中,并不需要看‘A’长成什么样子,计算机只需要关心怎么存储,怎么读取——所以计算机存储的是二进制。

那么在显示器与存储之间,就需要一个沟通的法则——这就是字符集编码

不同的规范,包含字符的范围不一样。

ASCII,用1个字节存储一个字符,可表示的范围为2^8个字符,但实际好像只用0-127

显示器在显示的时候,读一个字节,就查找相应的字符,显示在屏幕上——实际计算机的处理过程可能更优雅

 

.net中使用的是Unicode,也就是在内存中,字符‘A’,使用2字节的内存{0x41, 0x00}

c语言中,使用的是ASCII,显示中文字符要特别处理一下

小彬 | 园豆:947 (小虾三级) | 2010-11-24 10:50
0

c#中汉字也是2个占位

茂茂 | 园豆:2892 (老鸟四级) | 2010-11-24 11:20
你自己看一下C# 汉字占几位
支持(0) 反对(0) Fallen Angel. | 园豆:5 (初学一级) | 2010-11-24 11:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册