fprintf automatic spacing for strings of different lenghts
47 次查看(过去 30 天)
显示 更早的评论
Hi,
how do i evenly space if I print this text using fprintf, in the example 1 below is what I get but I would like to output in the format of example 2, is there a way to automate the spacing if we the consecutive places and I have a string(name of place n) of different lenghts?
where cities is an array of strings show in the examples below and paths is a vector
for i = 1:(length(path)-1)
fprintf('%s --> %s (Distance = %s km)\n', cities(path(i)), cities(path(i+1)), num2str(matDist(min(... [path(i) path(i+1)]), max([path(i) path(i+1)]))));
end
fprintf('%s --> %s (Distance = %s km)\n', cities(path(end)), cities(path(1)), num2str(matDist(min(... [path(1) path(end)]), max([path(1) path(end)]))));
Example 1
Path and distance
----------------------------------------
Case fileName | Origin = Vila Ló(city 1)
----------------------------------------
Total Distance = 414 km
Vila Ló --> Pião (Distance = 46 km)
Pião --> Chão de Frades (Distance = 73 km)
Chão de Frades --> Salmorrete (Distance = 205 km)
Salmorrete --> Tortolindo (Distance = 33 km)
Tortolindo--> Vila Ló (Distance = 57 km)
Example 2
Path and distance
----------------------------------------
Case fileName | Origin = Vila Ló(place 1)
----------------------------------------
Total Distance = 414 km
Vila Ló --> Pião (Distance = 46 km)
Pião --> Chão de Frades (Distance = 73 km)
Chão de Frades --> Salmorrete (Distance = 205 km)
Salmorrete --> Tortolindo (Distance = 33 km)
Tortolindo --> Vila Ló (Distance = 57 km)
2 个评论
Dyuman Joshi
2023-10-16
移动:Dyuman Joshi
2023-10-16
Vectorized version -
%Sample data
cities1 = ["Vila Ló", "Pião", "Chão de Frades", "Salmorrete", "Tortolindo"];
cities2 = cities1([2 3 4 5 1]);
distance = [46 73 205 33 57];
%Convert the distance to strings with the desired precision
distance = compose("%d", distance);
n = repelem(max(strlength(cities1)),1,numel(cities1));
%If you need to add more spaces in between, modify n accordingly
%For e.g
%n = n+5;
fprintf('%-*s --> %-*s (Distance = %s km)\n', [n;cities1;n;cities2;distance])
采纳的回答
Voss
2023-10-16
cities = ["Pasadena","Urbana-Champaign","Cambridge"];
path = 1:numel(cities);
d = [3200 1600 4800]; % using a vector of distances since I don't have your function matDist()
n = max(strlength(cities));
for i = 1:(length(path)-1)
fprintf('%-*s --> %-*s (Distance = %.f km)\n', n, cities(path(i)), n, cities(path(i+1)), d(i));
end
fprintf('%-*s --> %-*s (Distance = %.f km)\n', n, cities(path(end)), n, cities(path(1)), d(end));
3 个评论
Walter Roberson
2023-10-16
Using the %* facility is a bit obscure, but should work fine for this purpose.
更多回答(1 个)
Florian Bidaud
2023-10-16
编辑:Florian Bidaud
2023-10-16
Something like this should do
cities = ["Vila Lo" "Piao" "Chao de Frades" "Salmorrete" "Tortolindo"];
path = [1 2 3 4 5];
distance = [46 73 205 3357]; % Should be replaced by your function matDist
max_city_len = max(strlength(cities));
for i = 1:(length(path)-1)
fprintf('%s %s --> %s %s (Distance = %s km)\n', cities(path(i)),repmat(' ',1,max_city_len-strlength(cities(path(i)))+1), repmat(' ',1,max_city_len-strlength(cities(path(i+1)))+1), cities(path(i+1)), num2str(distance(i)));
end
fprintf('%s %s --> %s %s (Distance = %s km)\n', cities(path(end)), repmat(' ',1,max_city_len-strlength(cities(path(end)))+1), repmat(' ',1,max_city_len-strlength(cities(path(1)))+1), cities(path(1)), num2str(distance(end)));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environment and Settings 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!