C# 433- 388 433 bytes
Quick job hopefully making good use of LINQ.
using C=System.Console;using System.Linq;class P{static void Main(){var D=("\n"+C.In.ReadToEnd()+"\n").Split('\n');var E=D.Select(l=>(";int "+li=D.PadRight(DLength,I,J,k,M=D.Max(m=>m.Length+1)Length),d,c=0;var E=D.Select(l=>l.PadRight(M+1).ToCharArray()).ToArrayToList();int L=E.Length,i=L,j,I,J,k,d,c=0;for;for(;i-->0;)for(j=E[i].Length;jJ=M;J-->0;)if(E[I=i][J=j]==43E[I=i][J]==43){d=0;forfor(d=0,c++;(k=E[I+=((d&2)d-1)*(d&12)][J+=(%2][J+=(d&2)d-1)*(~d&1)]%2])>32;)if(k<44){E[I][J]=' ';d=d%2<1?E[I-1][J]<99?3:1:E[I][J-1]E[I][J+1]!=45?20:0;}2;}C.WriteLine(c);}}
using C=System.Console;
using System.Linq;
class P
{
// this is far too LINQy
static void Main()
{
// 43 + 00101011
// 45 - 00101101
// 124 | 01111100
// read in
var D=("\n"+C.In.ReadToEnd()+"\n").Split('\n'); // say no to verticle bounds checking
//
max all the lines the same length
int i=D.Length,I,J,k,
var E=D.Select(l=>(" "+l.PadRight(DM=D.Max(m=>m.Length+1))).ToCharArray()).ToArray(Length); // say no to horizontal bounds checking
, // consume +s
M is max length of inta L=E.Length,i=L,j,I,J,k,line
d, // d is direction of travel (1 == vertical?, 2 == down/right?)
c=0; // c is loop count
for(;i-->0;)
for(j=E[i].Length;j-->0;)
// max all the lines the same length
var ifE=D.Select(E[I=i][J=j]==43l=>l.PadRight(M+1).ToCharArray()).ToList(); // right-most lower-most +
say no to horizontal bounds checking
{
// consume +s
for(;i-->0;) // usefor Ieach andline J(bottom into heretop)
for(J=M;J-->0;) // for each d=0;char //(right goto upleft)
if(E[I=i][J]==43) // right-most lower-most +
for(d=0,c++; // go up, increment counter
(k=E[I+=((d&2)d-1)*(d&12)][J+=(%2][J+=(d&2)d-1)*(~d&1)]%2])>32 // move I and J, then check we havn't hit a space
;)
if(k<44) // +
{
E[I][J]=' '; // toodles
d=
d%2<1? // currently horizontal, must go vertical
E[I-1][J]<99?3 // can't go up, must go down
:1 // can go up, go up
: // currently verticle, must go horizontal
E[I][J-1]E[I][J+1]!=45?20 // can't go leftright, must go rightleft
:02 // can go leftright, go leftright
;
}
}
// output result
C.WriteLine(c);
}
}