7 svar
214 visningar
Moni1 721
Postad: 13 mar 2021 18:39

en funktion som returnerar antalet ord och tecken i en teckenfält

 Skriv en funktion, [tecken,ord] = word_count(text).


text är en text (ett fält av tecken). Funktionen ska räkna (och returnera) antalet
tecken och avslutade ord i text.

Ord avslutas med de två tecknen  \b  eller då
strängen tar slut. En tom text består av 0 tecken och 0 ord.
Exempel:
Texten: Alla\bhundarna\bvar\bokopplade\b består av 32 tecken och 4 ord,

texten
Alla\bhundarna\bvar\bokopplade består av 30 tecken och 4 ord.

jag har skrivat denna kod, men vet inte hur jag ska formulera vilkoret för avslutade ord.

function [tecken, ord] = word_count(text)
tecken=[]; ord=[]
for i = 1:length(text)
    if % här vil jag formulera satsen då ett ord avslutas med \b eller strängen tar slut.
    else
        tecken = tecken +1;
    end
end
emilg 478
Postad: 15 mar 2021 07:44

Ungefär if text(i) == '\b' | text(i) == '\n'

(tänk på det ovan som psuedokod, jag har inte programmerat i Matlab på måånga år)

Moni1 721
Postad: 15 mar 2021 11:08

hej, igen, nu har jag kört denna koden på matlab, men den returnerar bara tomma vektorer

function [tecken, ord] = word_count(text)
tecken=[]; ord=[]
for i = 1:length(text)
    if text(i) == '\b' | text(i) == '\n'
        tecken = tecken +1;
        ord= ord+1;
    end
end

end
emilg 478
Postad: 15 mar 2021 11:15

Som sagt så är jag inte säker på att man skriver exakt så. Kommer programmet in i if-satsen? Börja prova med \b bara exempelvis.

Ser konstigt ut att skriva t.ex. tecken = tecken + 1 när tecken är en vektor.

Moni1 721
Postad: 15 mar 2021 11:28 Redigerad: 15 mar 2021 12:16

hej, jag har gjort fel i början, vi ska satte båda antal tecken och ord lik noll. och jag har testet denna kod med den bara returnerar anttecken och antord lik 3, men den tar inte hänsyn till ord på sluten av sekvensen. tror du att vi kan ordna på den så att vi får okså med ord på sluten av sekvensen.

text=('Alla\bhundarna\bvar\bokopplade');
anttecken=0; antord=0;
for i = 1:length(text)
    if text(i) == '\b' 
        anttecken = anttecken +1;
        antord= antord+1;
    end
end
disp(anttecken)
emilg 478
Postad: 15 mar 2021 12:41

1. Din textsträng har ingen "ny rad".

2. Vad ger egentligen length(text), jag tror att i matlab ska du använda strlength? (https://se.mathworks.com/help/matlab/ref/strlength.html)

3. Det kan vara lurigt att kolla efter ny rad, olika operativsystem använder olika tecken.

Moni1 721
Postad: 15 mar 2021 12:59

hej, jag hade lagt till fel kod i den föregående bild, jag mente denna koden. alltså jag får riktig antal tecken, men inte antal ord, då jag kan inte formulera villkoret för att orden på sluten av sekvensen ska vara med i antal ord.

text=("Alla\bhundarna\bvar\bokopplade");
anttecken=0; antord=0;
for i = 1:strlength(text)
     ind=strfind(text,'\b');
     
        anttecken = anttecken +1;
        antord= numel(ind);
end
disp(antord)
disp(anttecken)
emilg 478
Postad: 15 mar 2021 13:12

Jag tror det är bättre som du hade det innan.

Du skulle t.ex. kunna räkna upp antal ord för varje '\b' och annars räkna upp antal tecken.

Svara
Close