我正在寻找用随机值替换字符串 - 并保持相同的长度。但是,我希望所有字符都替换为字符,数字将替换为数字。
我想知道最好的方法。我正在考虑对每个角色进行for循环,但这可能会导致性能密集。
我可能错了,在这种情况下请告诉我。
由于
答案 0 :(得分:2)
除非您有性能要求和/或问题,否则不要进行微量优化。只需使用循环。
答案 1 :(得分:2)
你错了。要知道它是字符还是数字,您需要查看字符串中的每个值,因此无论如何都需要遍历字符串。
答案 2 :(得分:1)
如果没有循环每个角色,你还有什么其他的呢?至少,您需要查看该字符是否为数字并替换它。我假设您可以创建一个名为RandomChar和RandomDigit的函数。这将写成比c#ish更多的c ++,但你明白了:
for (int i=0;i<myStr.Length();++i)
{
c=myStr[i];
if(isDigit(c))
{
c=RandomDigit();
}
else
{
c=RandomChar();
}
myStr[i]=c;
}
除了你需要检查每个角色之外别无他法。
函数isDigit,RandomDigit和RandomChar留给读者练习。
答案 3 :(得分:1)
如果它是长字符串,则可以是因为对字符串的更改会导致创建新对象。我会使用for循环,但将您的字符串转换为char数组操作,然后返回到字符串。
答案 4 :(得分:0)
(我假设你已经有了生成随机字符的方法。)
var source = "RUOKICU4T";
var builder = new StringBuilder(source.Length);
for (int index = 0; index < builder.Length; index += 1)
{
if (Char.IsDigit(source[index]))
{
builder[index] = GetRandomDigit();
}
else if (Char.IsLetter(source[index]))
{
builder[index] = GetRandomLetter();
}
}
string result = builder.ToString();
答案 5 :(得分:0)
考虑使用LINQ来帮助避免明显的循环。您可以重构以确保数字
static void Main()
{
string value = "She sells 2008 sea shells by the (foozball)";
string foo = string.Join("", value
.ToList()
.Select(x => GetRand(x))
);
Console.WriteLine(foo);
Console.Read();
}
private static string GetRand(char x)
{
int asc = Convert.ToInt16(x);
if (asc >= 48 && asc <= 57)
{
//get a digit
return (Convert.ToInt16(Path.GetRandomFileName()[0]) % 10).ToString();
}
else if ((asc >= 65 && asc <= 90)
|| (asc >= 97 && asc <= 122))
{
//get a char
return Path.GetRandomFileName().FirstOrDefault(n => Convert.ToInt16(n) >= 65).ToString();
}
else
{ return x.ToString(); }
}