c#与matlab混合编程中 关于字符串和字符串数组的传递

来源:互联网 发布:淘宝死店是什么意思 编辑:程序博客网 时间:2024/05/10 13:17
1字符串的传递,首先是c#与matlab之间进行参数传递用到MWArray这一参数类型作为桥梁,c#调用matlab的方法有好几种,这里我才用的是把mat文件编译成.dll文件,然后再c#中添加引用,具体步骤可参考http://www.docin.com/p-435794697.html;

   下边是c#程序代码

                  string a;
            a = Console.ReadLine();
                        string b;
            b = Console.ReadLine();
            testtestsjyd1 t=new testtestsjyd1();//这里testtestsjyd是matlab的函数生成的类
            MWArray result = t.shensuowudongzuo1(a, b);//shensuowudongzuo1()是matlab的函数用于实现一定的功能;
            Console.WriteLine(result);

             MWNumericArray x1 = (MWNumericArray)result;
            double[,] jieguo1 = (double[,])x1.ToArray(MWArrayComponent.Real);
            Console.WriteLine(jieguo1[1,0]);

           //这里就实现了将字符串传递给MATLAB的函数shensuowudongzuo1(),然后该函数将运算结果返回到result,但由于此时result的类型不是c#可以直接使用的类型,所以需要转换
           

2字符串数组的传递

   曾经在网上搜了好久没有找到这方面详细的资料,我们知道,在c#中字符串个格式为双引号括起来。如:str=“Hello”,而在matlab中是单引号括起来的,如:str1=‘Hello',可能是我本身接触matlab和c#时间不长的原因不愿意修改matlab的函数的参数(也可能是我接触matlab和c#时间不长孤陋寡闻的原因,我也不知道matlab的函数能否接受字符串数组作为参数),所以就想着,在c#这边将字符串数组以字符串格式输入,中间以空格间隔起来,例如:本来字符串数组为:str[3]={"Hello","The","World"}; 现在输入str="Hello The World",然后通过字符串的方法传递给matlab的函数,在matlab的函数中实现把字符串分割成字符串数组;

有了这个想法,我就试了一下,结果老是出现问题要不就是说什么cell array contains cell element 或者就直接变成了一个字符串HelloTheWorld;

后来我发现原来c#传递给matlab的字符串是以cell数组的形式存放的所以

通过下联两条matlab语句就可以实现:

str=cell2mat(str);%将cell数组转换成普通数组
str1=regexp(str, '\s+', 'split');%将str="Hello The World"变成str1={’Hello‘,‘The’,‘World’},这就实现了c#的数组变成了MATLAB中的数组;

 

 

以上只是自己调程序时的思路,有可能走了弯路,也有可能是自己的无知里边有很多错误,记下来只是想以后出现类似问题可以更快的处理或者以后知道了自己曾经的错误也可以修稿一下

原创粉丝点击