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;
}
count förblir 0 för att den inte sätts till -1.
hej jag fick hjälp av någon annan, fick göra några småändringar.
Blev du inte hjälpt av mitt konstaterande?
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;
}
}
}