Counting characters in a file
Ältere Kommentare anzeigen
Hello,
I am doing an online course on matlab in coursera and I have come a cross a problem that seems hard for me to solve.
I need to write a function that takes the name of the text file and a paticular charater as input and then the function must count how many times the character is present in the file and return that number.
function charnum = char_counter(b,a)
fid = fopen(b,'r');
if fid < 0 || ~ischar(a) || length(a) == 0
charnum = -1;
return
end
t=0;
d=1;
while (d>0)
d = fgetl(fid);
x = strfind(d,a);
t = t + length(x);
end
charnum = t;
fclose(fid);
end
I have passed 3 out of 4 checks, following is the error that I am getting
Variable charnum has an incorrect value. When testing with ' ' your solution returned 1 which is incorrect. (75444).
I tried countin the number of " ' ' " as well and it seemed correct to,
I would like to the mistake that I am making.
Thanks
Hussain
6 Kommentare
Ameer Hamza
am 28 Mär. 2020
Can you give the function call when the function fails. What are the values of a and b.
Hussain Bhavnagarwala
am 28 Mär. 2020
Ameer Hamza
am 28 Mär. 2020
I am not sure about the issue. Maybe you can try this loop-free version.
char_counter('text.txt', ' ')
function charnum = char_counter(b,a)
fid = fopen(b,'r');
if fid < 0 || ~ischar(a) || isempty(a)
charnum = -1;
return
end
data = char(fread(fid)');
charnum = numel(strfind(data, a));
fclose(fid);
end
Image Analyst
am 29 Mär. 2020
Adam, I'd put that down in the answer section so you can get credit for it. I was about to say the same thing.
Adam Danz
am 29 Mär. 2020
Akzeptierte Antwort
Weitere Antworten (3)
Rishi Diwan
am 23 Mai 2020
function charnum = char_counter(fname,character)
fid = fopen(fname,'rt');
if fid <= 0 || ~ischar(character) || ~ischar(fname) || length(fname)==0 || length(character)==0 || isempty(fname) || isempty(character)
charnum=-1;
return;
end
c=0;
ol=fgets(fid);
while ischar(ol)
c=c+count(ol,character);
ol=fgets(fid);
end
charnum=c;
fclose(fid);
end
3 Kommentare
Walter Roberson
am 23 Mai 2020
if the file open succeeded but the other parameter is not a valid character then you are leaving the file open.
yi yang
am 4 Sep. 2022
a shorter version of your code:
function charnum = char_counter(fname,character)
charnum = count(fileread(fname),character);
end
Walter Roberson
am 4 Sep. 2022
This turns out to be a homework assignment. The checks for file existing and for the input being a valid character are required as part of the assignment.
Ahsiur Rahman Nirjhar
am 24 Mai 2020
function x=char_counter(a,b)
fid=fopen(a,'rt');
if fid <0 || ~ischar(b)
s=-1;
else
s=0;
oneline=fgets(fid);
while ischar(oneline)
s=s+sum(double(oneline)==double(b));
oneline=fgets(fid);
end
fclose(fid);
end
x=s;
Mert Yalcinoz
am 1 Feb. 2022
By looking other's people answers i have combined my code and got the result.
function charnum=char_counter(fname,character) %creating function
fid=fopen(fname,'rt');
if fid<0 || ~ischar(character) || length(character)==0 %conditions
charnum=-1;
return
end
a=0; %setting a total value for found desired string
b=fgets(fid); %for reading the first line, returns single line in a string
while ischar(b) %loop for each line
a=a+count(b,character); %summing when a character is found
b=fgets(fid); %if there is no new line, b becomes -1 and loop ends.
end
charnum=a; %setting output variable
fclose(fid);
end
1 Kommentar
Walter Roberson
am 1 Feb. 2022
Suppose that a valid file name is passed in, but suppose that character is not a valid character or is empty. Then you set charnum=-1 and return... without having closed the file.
Kategorien
Mehr zu Customize Object Display for Classes finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

