void add_data_from_line(Memory& mem, string& line) { regex regex_apostrophe("'"); std::regex_replace(line, regex_apostrophe, "’"); regex regex_word("([a-zA-záéíóúñÁÉÍÓÚÑ'’]+)"); sregex_iterator find_word(line.begin(), line.end(), regex_word); for (sregex_iterator find_end; find_word != find_end; ++find_word) { string word_found = find_word->str(); word_found = to_lower_case(word_found); update_word(mem.word_list, word_found); } vector<regex> regex_punc = { regex("\\."), regex(","), regex(";"), regex(":"), regex("!"), regex("\\?"), regex("(?:[-–—]\\s*){1,2}"), regex("…|(?:\\.\\s*){3}") }; for (int i = 0; i < PUNC_NUM; ++i) { sregex_iterator find_punc(line.begin(), line.end(), regex_punc[i]); mem.punc_freq[i] += std::distance(find_punc, sregex_iterator()); } regex regex_split_line("^([^.!?…]*[.!?…])?((?:[^.!?…]*[.!?…])*?)([^.!?…]*)$"); std::sregex_token_iterator split_line_prev(line.begin(), line.end(), regex_split_line, 1); std::sregex_token_iterator split_line_cont(line.begin(), line.end(), regex_split_line, 2); std::sregex_token_iterator split_line_xtra(line.begin(), line.end(), regex_split_line, 3); string sentence_prev = *split_line_prev; int sentence_prev_len = get_word_count(sentence_prev); if (sentence_prev_len > 0) { sentence_prev_len += mem.sentence_carry; mem.sentence_len.push_back(sentence_prev_len); mem.sentence_carry = 0; } string sentence_cont = *split_line_cont; regex regex_split_sentence("([^\\.!?…]*)[\\.!?…]"); sregex_iterator find_sentence(sentence_cont.begin(), sentence_cont.end(), regex_split_sentence); for (sregex_iterator find_end; find_sentence != find_end; ++find_sentence) { string sentence_found = find_sentence->str(); int sentence_len = get_word_count(sentence_found); mem.sentence_len.push_back(sentence_len); mem.sentence_carry = 0; } string sentence_xtra = *split_line_xtra; int sentence_xtra_len = get_word_count(sentence_xtra); if (sentence_xtra_len > 0) { mem.sentence_carry += sentence_xtra_len; } }
int main() { input(); int word_count = get_word_count(); printf("Words = %d\n", word_count); int num_sum = get_num_sum(); printf("Sum of numbers = %d\n", num_sum); getch(); return 0; }
static ssize_t word_count_write(struct file *file, const char __user * buf, size_t count, loff_t *ppos) { ssize_t written = count; copy_from_user(mem, buf, count); mem[count] = '\0'; word_count=get_word_count(mem); read_flag='n'; printk("write: %d Byte \n", (int)count); return written; }
static ssize_t word_count_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { ssize_t written = count; if (copy_from_user(mem, buf, count)) { return -EINVAL; } mem[count] = '\0'; word_count = get_word_count(mem); printk("write:word count:%d\n", (int) word_count); return written; }
//------------------------------------------------------------------------------ str_iter line_state::get_end_word() const { int n = get_word_count(); return (n ? get_word(n - 1) : str_iter()); }
//------------------------------------------------------------------------------ bool line_state::get_end_word(str_base& out) const { int n = get_word_count(); return (n ? get_word(n - 1, out) : false); }