Мне нужна помощь в выполнении этой функции, чтобы она правильно вернула количество слов в c-строке. Может быть, моя логика ошибочна?Подсчет слов в строке c
#include <iostream>
#include <string>
#include <cctype>
int countwords(char *, int);
using namespace std;
int main()
{
char a[] = "Four score and seven";
int size = sizeof(a)/sizeof(char);
cout << countwords(a,size);
return 0;
}
int countwords(char* a, int size){
int j = 0;
for(int i = 0; i < size; i++){
if(isspace(i) and isalnum(i - 1) and isalnum(i + 1))
j++;
}
return j;
}
Вы не используете 'a' нигде в этом цикле? – ChiefTwoPencils
Вы, вероятно, должны использовать что-то вроде 'std :: find' вместо того, чтобы проходить, чтобы ваше намерение было понятным. Вам также необходимо убедиться, что вы не выходите за пределы с предыдущими и последующими проверками символов. Наконец, это должно быть 'const char * a', если используется строка C. Вы не изменяете его, и это действительно раздражает использование функции, которая принимает неконстантный параметр, но не изменяет его. – chris
Кроме того, как только вы исправите 'a [i ...]', как написано, вы получите одну ошибку, поскольку в конце не будет места, чтобы было возможно использовать последнее слово, что в любом случае могло бы привести к поломке из-за 'isalnum (i + 1)'. – ChiefTwoPencils