How do I get the least used character in the text file ?
1 次查看(过去 30 天)
显示 更早的评论
a= textread('GreatExpectations.txt','%c');
[m]=length(a);
most_used_letter=char(mode(0+a))
采纳的回答
Mohammad Abouali
2015-4-25
编辑:Mohammad Abouali
2015-4-26
%Sample text; equivalent to your a
txt='this is a sample text.';
uniqueChars=unique(txt(isletter(txt)));
charCount=arrayfun(@(c) sum(txt==c), uniqueChars);
% Now printing results
fprintf('Char count\n');
fprintf(' %c %d\n',[uniqueChars;charCount])
fprintf('\nThe least Used Characters are:\n')
fprintf('%c\n',uniqueChars(charCount==min(charCount)))
fprintf('\nThe most Used Characters are:\n')
fprintf('%c\n',uniqueChars(charCount==max(charCount)))
Once you run it you well get this:
Char count
a 2
e 2
h 1
i 2
l 1
m 1
p 1
s 3
t 3
x 1
The least Used Characters are:
h
l
m
p
x
The most Used Characters are:
s
t
2 个评论
Mohammad Abouali
2015-4-26
编辑:Mohammad Abouali
2015-4-26
You are welcome.
In larger texts, when you are sure that all characters are used you can remove uniqueChars=unique(txt(isletter(txt))); and then modify the next line form
charCount=arrayfun(@(c) sum(txt==c), uniqueChars);
to
charCount=arrayfun(@(c) sum(txt==c), char([65:90 97:122]));
You have to be sure that all characters are used though. Otherwise, those characters that are not used would be returned as the least used characters.
Also if upper/lower case are not important; then once you are done reading the text file do this:
txt=lower(txt);
and in this case if you decided to use the second form you need char(97:122) instead of char([65:90 97:122]);
If this has answered your question, I appreciate it if you accept the answers.
更多回答(1 个)
per isakson
2015-4-26
编辑:per isakson
2015-4-26
Here is a code based on histc
ffs = 'GreatExpectations.txt';
fid = fopen( ffs );
buf = fscanf( fid, '%1c' );
fclose( fid );
letters only
ascii = double( upper( buf ) );
ascii( ascii<double('A') | ascii>double('Z') ) = [];
ascii_ranges = ( double('A') : double('Z') );
[ ascii_counts, ~ ] = histc( ascii, ascii_ranges );
bar( ascii_ranges, ascii_counts, 'histc' )
min_val = min( ascii_counts );
ix_min = find( ascii_counts == min_val );
fprintf( 'The letters, %s, each appears %d time(s)\n' ...
, char('A'+ix_min-1), min_val )
it prints
The letters, JQZ, each appears 1 time(s)
 
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!