统计字符串中的单词数目

统计字符串中单词的数目,更复杂的话从一个文本中读出字符串并生成单词数目统计结果。

        第一个问题:这个问题的解决方案是,字符串之所以可以成为单词就是因为有空格符的出现,那么对于字符串中单词的数目来说,只需要统计其中空格符出现的次数就可以了~~~

第二个问题,从文本中读出字符串并统计每一个单词的统计结果,那么久需要借助于字典map了,每一个单词使用了一个位置 ,如果是已经出现的单词,那么就给相应的单词数量加一,如果没有出现在字符串中,那么就添加该单词。

对于一串字符串来说,如果需要对于其中的单词进行统计,就要首先搞清楚字符串的特点是什么,其中空格是作为分隔符的,如果可以使用正则表达式,那么只需要一层一层的分解。但是C++中没有正则表达式,就需要对于字符串进行一次次的判断一直到最后的结果,其实主要就是对于字符串中的制表符/t换行符/n忽略掉。一层一层的进行计算,最后得出最后的结果~~~

在这里遇到一个问题,就是C++中指针为null和""和什么也不做的区别~

  1. string a;
  2. if(!a.empty())
  3. cout<<"string a";
  4. string b = "";
  5. if(!b.empty())
  6. cout<<"string ‘‘";
  7. if(a == b)
  8. cout<<"string ‘‘ a"<<endl;

首先说明,C++中的string a;和string b = "";是一样的效果,他们有地址,但是结果为空,但是如果声明a = NULL 那么a连地址都没有,就更加不能使用empty函数进行判断了。如果empty返回为true,说明a不为空。

下面的是该算法的代码:

  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <fstream>
  5. using namespace std;
  6. int main(int argc, char const *argv[])
  7. {
  8. ifstream fin("wordtotol.txt", std::ios::in);
  9. char line[1024]={0};
  10. string str = "";
  11. while(fin.getline(line, sizeof(line)))
  12. str += line;
  13. fin.clear();
  14. fin.close();
  15. map<string,int> wordmap;
  16. map<string,int>::iterator mapiter;
  17. string unit;
  18. string::iterator rIt = str.begin();
  19. while (rIt != str.end())
  20. {
  21. if(*rIt>=‘A‘ && *rIt<=‘Z‘)
  22. *rIt += 32;
  23. if ( ‘a‘<=*rIt && *rIt<= ‘z‘ )
  24. {
  25. unit+=*rIt;
  26. rIt++;
  27. continue;
  28. }
  29. else{
  30. if ( (mapiter = wordmap.find(unit) )!= wordmap.end())
  31. {
  32. mapiter->second++;
  33. }else if(!unit.empty())
  34. {
  35. wordmap.insert(make_pair(unit,1));
  36. }
  37. rIt++;
  38. }
  39. unit.clear();
  40. }
  41. int n=0;
  42. for (mapiter = wordmap.begin(); mapiter != wordmap.end(); ++mapiter)
  43. {
  44. cout<<mapiter->first<<" "<<mapiter->second<<endl;
  45. n+=mapiter->second;
  46. }
  47. cout<<"单词数目:"<<wordmap.size()<<endl<<"所有单词数目:"<<n<<endl;
  48. return 0;
  49. }

将文件读入后存入str字符串中,然后依次循环,当前字符字母为大写的时候,将大写转为小写。如果是字母那么一直循环,并添加到unit单词中,遇到不是字符的,首先将上面的单词find一下,找到则加一,没有找到则说明是一个新单词,当该单词插入到map中。最后对map进行一次循环得到结果。

总结:fin.getline(line, sizeof(line))是读取文件的操作,对于读取的文件首先需要有缓冲区,将每一行读入缓冲区之后,再对缓冲区的line进行操作~~~

来自为知笔记(Wiz)

时间: 2024-10-14 10:29:22

统计字符串中的单词数目的相关文章

【面试题总结】1、统计字符串中某个单词出现的次数

[解决方法一]C++ map解决 一.map中的find函数: 用于查找map中是否包含某个关键字条目,传入的参数是要查找的key,最后返回一个迭代器,如果没有找到,则返回的迭代器等于end()返回的迭代器.示例代码: 1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 6 int main() { 7 map<int, string> mapStu

python统计字符串中每个单词出现的个数【一行】

s = 'i am very very like you and like you' dict( [(i, s.split().count(i)) for i in s.split()] ) Out[2]: {'i': 1, 'am': 1, 'very': 2, 'like': 2, 'you': 2, 'and': 1} set( map(lambda x:(x, s.split().count(x)), s.split()) ) Out[6]: {('am', 1), ('and', 1)

力扣(LeetCode)字符串中的单词数 个人题解

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John" 输出: 5 题目描述比较不清楚,这里只要是用空格隔开的一律当作字符,包括非字母.使用JAVA自带库函数解决问题.记得忽略空格情况 当然这里使用了较大的内存保存分割后的ss字符串数组,如果对内存比较敏感的可以对字符串手动以空格划分.(这里空格可能多个,所以可以使用正则表达式较为方便去匹配) 代码如下: cl

leetcode434 字符串中的单词树(python)

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John"输出: 5 class Solution(object): def countSegments(self, s): """ :type s: str :rtype: int """ s = s.split() return len(s) split

统计字符串中单词的个数

1.单纯统计单词个数,单词与单词之间只考虑空格的情况 // word_statistic.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; #define M 10000 #define N 20 int _tmain(int argc, _TCHAR* argv[]) { char str1[M]={0};

统计一个字符串中的单词的个数,并打印各个单词

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:Word:6 Shen zhen is a beautiful city!*/ #include<stdio.h> #define SIZE 1000 void wordCount(char *str) { int count = 0, flag = 0; char *p = str; while (*p != '\0'){ while (*p == 32){ if (*(p + 1) == 0){/

2014华为实习上级笔试题-- 统计字符串中出现的单词

#include<iostream> //#include<string> using namespace std; struct node { char word[10]; int num; }; node obj[100]; void my_word(char input[], char output[]) { int sum=0,flag=0; int i=0,j=0,k=0; while(input[i]!='\0')///////////读入单词 { if((input[

技巧之C#统计字符串中字符出现的次数(转)

方法1.自定义类 class CharNum { private char c; private int num; public char C { get { return c; } } public int Num { get { return num; } set { num = value; } } public CharNum(char ch) { this.c = ch; this.num = 1; } } static void Main(string[] args) { /* */

c语言代码编程题汇总 :统计字符串中的大写和小写字母的个数

统计字符串中的大写和小写字母的个数 程序代码如下: 1 /* 2 2017年3月6日19:42:21 3 功能:统计字符串中的大写和小写字母的个数 4 */ 5 6 #include "stdio.h" 7 void fun (char *,int *,int *); 8 9 int main (void) 10 { 11 int m = 0,n = 0; 12 int *Pm = &m, *Pn = &n; 13 char s[100]; 14 printf (&qu