Так программа выглядела бы без учета условия использования переменной типа "string"
Var
x:integer;
n:integer;
begin
n:=0;
readln(x);
while x<>0 do
begin
n:=n+1;
x:=x div 10;
end;
writeln(n);
end.
А если x:string, то программа не будет работать: данные строкового типа нельзя делить