converting to/from char[]/string

Dennis dkorpel at gmail.com
Thu Mar 5 12:37:46 UTC 2020


On Thursday, 5 March 2020 at 11:31:43 UTC, mark wrote:
> I've now got Martin Porter's own Java version, so I'll have a 
> go at porting that to D myself.

I don't think that's necessary, the errors seem easy to fix.

> src/porterstemmer.d(197,13): Error: cannot implicitly convert 
> expression s.length of type ulong to int
> src/porterstemmer.d(222,9): Error: cannot implicitly convert 
> expression cast(ulong)this.m_j + s.length of type ulong to int

These errors are probably because the code was only compiled on 
32-bit targets where .length is of type `uint`, but you are 
compiling on 64-bit where .length is of type `ulong`.
A quick fix is to simply cast the result like `cast(int) 
s.length` and `cast(int) (this.m_j + s.length)`, though a proper 
fix would be to change the types of variables to `long`, 
`size_t`, `auto` or `const` (depending on which is most 
appropriate).

> src/porterstemmer.d(259,12): Error: function 
> porterstemmer.PorterStemmer.ends(char[] s) is not callable 
> using argument types (string)
> src/porterstemmer.d(259,12):        cannot pass argument "sses" 
> of type string to parameter char[] s

These errors are because `string` is `immutable(char)[]`, meaning 
the characters may not be modified, while the function accepts a 
`char[]` which is allowed to mutate the characters.
I don't think the functions actually do that, so you can simply 
change `char[]` into `const(char)[]` so a string can be passed to 
those functions.


More information about the Digitalmars-d-learn mailing list