4 svar
263 visningar
Elias93 130
Postad: 18 maj 2019 16:59

Räkna ord i strängar

Hej!

Så här ser min uppgift ut:

1. See ex1word_count.c. Implement a program to count how many words there are in a
text (string). Example:

Input a text max 19 chars (space allowed) > Hej på dej
There are 3 word in the text

a) Make a basic version assuming all words are separated by exactly one space and no
leading or trailing spaces

b) Make program handle leading/traling spaces and possibly many spaces between words.
Also handle the empty string!

Så här har jag gjort:

char str[SIZE];
int i = 0;
int count = 0;

printf("Input a text max 19 chars (space allowed) > ");
read_str(str, SIZE);

if(str[0] == '\0' && str[1] == '\n'){
count = -1;
}
/* if(str[0] == SPACE){
count = -1;
}
else count = 0; */
for(i = 1;str[i + 1] !='\0'; i++ ){

if( str[i] == SPACE && str[ i - 1] != SPACE ){
count = count + 1;
}
}

printf("There are %d words in the text\n", count + 1);

 

(Den relevanta delen av programmet)

 

Frågan : Varför skriver den 1 words när jag trycker på mellanslag knappen och sedan enter?

 

(Den verkar ränka ord och 2 mellanslag går bra mellan ord, och ett mellanslagföre eller efter allt går bra.)

Inlässningsfunktionen har jag fått om ni behöver läsa:

void clean_stdin(void) {
int c;
// Read until we hit \n or EOF
while ((c = getchar()) != '\n' && c != EOF); //<--- empty statement
}

// Remove possible \n in string (new line)
bool remove_nl(char *str) {
size_t i = strlen(str) - 1;
if (str[i] == '\n') { // Is there a \n (enter key) to the left of '\0'?
str[i] = '\0'; // If so replace
return true;
}
return false;
}

// Read string from keyboard
bool read_str(char str[], int max_len) {
// Use fgets to limit user input.
if (fgets(str, max_len, stdin) == NULL) {
return false; // Input failed for om reason...
}
if (!remove_nl(str)) { // Didn't read \n
clean_stdin();
}
return true;
}

Laguna Online 30711
Postad: 18 maj 2019 20:09

count förblir 0 för att den inte sätts till -1.

Elias93 130
Postad: 21 maj 2019 10:28

hej jag fick hjälp av någon annan, fick göra några småändringar.

Laguna Online 30711
Postad: 21 maj 2019 18:16

Blev du inte hjälpt av mitt konstaterande? 

Elias93 130
Postad: 22 maj 2019 16:24

Det sa mig inte så mycket men tack för att du tog dig tid att skriva något alls. Så här gjorde jag:

 

while(str[pos]==SPACE){
pos++;
}

if (str[0] == '\0') {
count = -1;
} else {
count = 0;

for (i = pos; str[i + 1] != '\0'; i++) {

if (str[i] == SPACE && str[i - 1] != SPACE) {
count = count + 1;
}
}
}

Svara
Close