这是我遇到的一个问题,但失败了
假设说
string str = "wordcounter";
可以使用str.Length
但是,在C#中可以获取字母数,而不使用任何内置函数,如Length
,SubStr
等
答案 0 :(得分:13)
你可以写一个循环并在这个循环中增加一个计数器:
int numberOfLetters = 0;
foreach (var c in str)
{
numberOfLetters++;
}
// at this stage numberOfLetters will contain the number of letters
// that the string contains
还有另一种方式:
int numberOfLetters = str.ToCharArray().Length;
使用SysStringByteLen function上的BSTR还有另一种更疯狂的方法。 .NET中的字符串通过使用4字节整数在内存中布局,该整数包含字符串的长度,后跟表示每个字符的许多2字节UTF-16字符。这与BSTRs are stored的方式类似。所以:
class Program
{
[DllImport("oleaut32.dll")]
static extern uint SysStringByteLen(IntPtr bstr);
static void Main()
{
string str = "wordcounter";
var bstr = Marshal.StringToBSTR(str);
// divide by 2 because the SysStringByteLen function returns
// number of bytes and each character takes 2 bytes (UTF-16)
var numberOfLetters = SysStringByteLen(bstr) / 2;
Console.WriteLine(numberOfLetters);
}
}
显然,做这样的事情而不是使用内置的Length
函数永远不应该在任何真正的生产代码中完成,并且不应该认真对待这里显示的代码。
答案 1 :(得分:4)
怎么样?
int myOwnGetStringLength(String str)
{
int count = 0;
foreach(Char c in str)
count++;
return count;
}
答案 2 :(得分:4)
不是很快但是你总是可以循环并计算所包含的字符数。
int counter = 0;
foreach (var caracter in str)
{
counter ++;
}
答案 3 :(得分:4)
我的回答有点迟了,但我想发布相同的内容。尽管上面提到的所有解决方案都是正确的,但我相信foreach的IL在迭代之前确实知道了迭代的长度。谈到一个纯粹的解决方案,这是我的:
private int stringLength(string str) {
int length = 0;
bool done = false;
do {
try {
char c = str[length];
length++;
} catch (IndexOutOfRangeException) {
done = true;
}
} while(!done);
return length;
}
答案 4 :(得分:1)
class Program
{
static void Main(string[] args)
{
string Name = "He is palying in a ground.";
char[] characters = Name.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = Name.Length - 1; i >= 0; --i)
{
sb.Append(characters[i]);
}
Console.Write(sb.ToString());
Console.Read();
}
}
答案 5 :(得分:0)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter a string to find its lenght");
string ch = Console.ReadLine();
Program p = new Program();
int answer = p.run(ch);
Console.WriteLine(answer);
Console.ReadKey();
}
public int run(string ch)
{
int count = 0;
foreach (char c in ch)
{
count++;
}
return count;
}
}
答案 6 :(得分:0)
我的一般解决方案涉及不使用' foreach'或者' StringBuilder' (具体是C#)或没有任何例外。
string str = "wordcounter";
str += '\0';
int x = 0;
while (str[x] != '\0')
x++;
Console.WriteLine(x); //Outputs 11
答案 7 :(得分:0)
class Program
{
static void Main(string[] args)
{
string test = "test";
//string as char array:
//iterate through char collection
foreach (char c in test)
{
//do something
}
//access elements by index
Console.WriteLine("Contents of char array : {0}, {1}, {2}, {3}", test[0], test[1], test[2], test[3]);
Console.ReadKey();
}
}
答案 8 :(得分:-1)
private int getStringLength()
{
string str = "test";
int counter=0;
for(int i=0;str[i]!='\n';i++)
{
counter++;
}
return counter;
}