/ / Necesito devolver el número de palabras en Cting después de tomar la entrada del usuario: c ++, arrays, for-loop, c-strings, isspace

Necesito devolver el número de palabras en la cadena c después de tomar la entrada del usuario: c ++, matrices, bucles for, cadenas-c, espacio de emisión

Necesito hacer un programa que reciba información del usuario y luego devuelva el número de palabras ingresadas en la cadena. Almaceno la entrada del usuario en una matriz char words[256]; Tengo una función llamada countWords. Recorre la matriz y, si encuentra un espacio, el contador aumenta. if(words[i] == "") Si se alcanza el carácter nulo, el contador se detiene. Luego vuelve nSpaces + 1 para dar cuenta de la primera palabra.

Pero mi salida parece producir el número de caracteres en la cadena en su lugar. Cómo se puede arreglar esto.

#include <iostream>
#include <cstdlib>
using namespace std;

//Function Prototype
int countWords(char words[]);

int main(){

char words[256];

cout << "Enter a sentence: ";
cin.getline(words, 256);

int word_num = countWords(words);
cout << "The number of words in a string is: " << word_num << endl;

system("PAUSE");
return 0;
}

int countWords(char words[]){
int nSpaces = 0;
//unsigned int i = 0;

/*while(isspace(words[i])){
i++;
}*/

for (int i=0; i<256; i++){
if(isspace(words[i])){
nSpaces++;
// Skip over duplicate spaces & if a NULL character is found, we"re at the end of the string
//while(isspace(words[i++]))
if(words[i] == "")
nSpaces--;
}
}
// The number of words = the number of spaces + 1
return nSpaces + 1;
}

La salida es:

Enter a sentence: Yury Stanev
The number of words in a string is: 7

Respuestas

2 para la respuesta № 1

No está deteniendo el bucle cuando llega al carácter nulo. Solo está probando el carácter nulo dentro del if(isspace(words[i])) bloque, pero si el personaje es un espacio, entoncestampoco puede ser el terminador nulo. Como resultado, está leyendo más allá del final de la entrada y contando los espacios en la parte no inicializada de la cadena.

int countWords(char words[]){
int nSpaces = 0;

for (int i=0; i<256 && words[i] != ""; i++){
if(isspace(words[i])){
nSpaces++;
}
}
// The number of words = the number of spaces + 1
return nSpaces + 1;
}

0 para la respuesta № 2

isspace cuenta nuevas líneas (n), tabulaciones (t), v, fy r.

¿Probablemente solo quieres espacios en blanco? Verifique solo "" y "t".