我需要从标准输入读取一个字符串,执行一些操作,同时我需要将一些输入复制到char数组。 在C ++中,我可以这样做:
scanf("%s", &array[pos]);
将字符串s
复制到位置array
的字符pos
。
我需要很快完成这项工作(奥运任务)。
在C ++中阅读一段时间需要5秒。
在C#上,我尝试在循环中使用string.elementAt()
复制到数组但是花了70秒,这太过分了。另外,构建一个大字符串而不是使用string.ToCharArray()是一个坏主意。
任何想法如何做到这一点?
char[] ciag = new char[1010001];
for(int x = 0 ; x < n ; x++){
line = Console.ReadLine();
sekw[x] = poz;
len = int.Parse(line.Split(' ')[0]); //length of string to copy
string znaki = line.Split(' ')[1]; //copied string
for (int j = 0; j < len; j++)
{
ciag[poz + j] = znaki[j]; //put into array. Perhaps slow.
}
poz += len;
ciag[poz++] = 'k'; //my stuff
}
答案 0 :(得分:3)
public void CopyTo(
int sourceIndex,
char[] destination,
int destinationIndex,
int count
)
答案 1 :(得分:0)
尝试:
char[] c = new char[stringa.Length];
for(int i = 0;i<stringa.Length;i++){
c[i] = stringa[i];
}
我不确定它会改善性能。虽然清楚地解释你需要的东西真的有帮助
答案 2 :(得分:0)
使用此:
using (Stream stdin = Console.OpenStandardInput())
{
byte[] buffer = new byte[1024];
stdin.Read(buffer, 0, buffer.Length);
char[] inputCharArray = System.Text.Encoding.Default.GetChars(buffer);
}
答案 3 :(得分:0)
使用StringBuilder
。
此代码在大约一秒钟内处理100 x 10000个字符。 如果您需要它更快,您可以使用TPL - 命名空间中的任务并行库来使您的任务并行:System.Threading.Tasks
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
char[] input = CreateInput();
DateTime start = DateTime.Now;
for (int i = 1; i < 100; i++)
{
StringCutter(new String(input));
}
Console.WriteLine((DateTime.Now - start).ToString());
Console.ReadKey();
}
private static char[] CreateInput()
{
const int len = 10000;
char[] ret = new char[len];
for (int i = 0; i < len; i++)
{
ret[i] = Convert.ToChar(i % 256);
}
return ret;
}
private static String StringCutter(String str)
{
List<char> exclusion = new List<char> { 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u' };
StringBuilder result = new StringBuilder(str);
for (int i = 0; i < result.Length; i++)
{
if (!(exclusion.Contains(result[i])))
{
result.Remove(i, 1);
i--;
}
}
return result.ToString();
}
}
}
答案 4 :(得分:0)
for (int x = 0; x < n; x++)
{
line = Console.ReadLine();
sekw[x] = poz;
len = int.Parse(line.Split(' ')[0]);
char[] temp = line.Split(' ')[1].ToCharArray();
**Array.Copy(temp, 0, ciag, poz, temp.Length);**
poz += len;
ciag[poz++] = 'k';
}
答案 5 :(得分:0)
你可以做
char[] Words = "Exemple string test".ToCharArray();
char[] Words = Console.ReadLine().ToCharArray();