C++下面关于字符串数组的一些操作
2024-08-28 22:55:18
今天在写一个搜索引擎的分词系统,是很简单的那种,但是居然费了我一天的时间还没完成,晚上估计还得弄一会了,但是在这个过程中,遇到了集中关于字符串数组的操作,值得和大家分享一下。
首先是关于统计字符串数组元素的个数:
字符串数组不同于整型数组,每一个字符串所占的空间是不一样的,不能用sizeof简单的计算出来。下面是示例代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str[] = {"abfafawfefw","defg","","Miss",""};
cout << sizeof(str) / sizeof(str[]);
return ;
}
字符串数组存取方式采用了对齐原则,占用空间少的向占用空间多的靠齐,首先使用sizeof(str)首先获得所用的所用字节数,使用sizeof(str[0])再计算数组中一个元素平均占用的字节数。然后除一下,就是元素个数,但是注意,被除的那个元素应该是所占空间最大的那个。
然后是关于统计字符串数组各个元素出现的次数:
这个是我用在统计分词后得到的词组各自的频次的,但是不知道出了什么问题,一直实现不了,虽然我知道这个确实是很简单的一个问题。
我通过大百度找到了一种统计次数的方法,他是统计整型数组的,但是感觉很不错,但是我暂时还没有验证,先贴出来吧:
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[],b[],c[]={},i,j;
//a数组放随机数
//b数组放是否被统计的标志,1未统计,0已统计
//c数组放对应a数组中随机数出现的次数
for(i=;i<;i++)
{
a[i]=rand()()%;//产生0~20的随机数
b[i]=;//未统计
printf("%5d",a[i]); //打印a数组的值
if((i+)%==) //一行打印10个数
printf("\n");
}
printf("\n");
for(i=;i<;i++)
{
if(b[i]) //若a[i]未被统计
{
c[i]++; //次数加1
for(j=i+;j<;j++)//从下一个开始向后查找
if(a[j]==a[i]) //若相等
{
c[i]++; //则次数增1
b[j]=; //改为已统计
}
}
}
for(i=,j=;i<;i++)
{
if(c[i]) //若某随机数出现了,则打印其值和出现次数
printf("%3d:%5d 出现 %3d次\n",j++,a[i],c[i]);
}
}
他用了一个统计标志,这个很适合我现在的这个问题,也希望能对大家有用吧,谢谢了。
下面是CSDN上一个很不错的关于C++的各类总结,这个链接是字符串的。
http://blog.csdn.net/wangfengwf/article/details/11496141
最新文章
- 生产环境中,数据库升级维护的最佳解决方案flyway
- 历年NOIP水题泛做
- 编译CDH Spark源代码
- SQL Server 创建表 添加主键 添加列常用SQL语句【转】
- HTTP - 摘要认证
- EXP/IMP的三种模式
- Java魔法堂:JVM的运行模式 (转)
- solr中重跑索引
- 监控gc
- OAuth2.0 知多少
- Ubuntu 共享 转载
- Solr4.10与tomcat整合并安装中文分词器
- c#gridcontrol 的一些设置
- git 更新远程分支列表
- Nginx + Tomcat 在 Windows7 上搭建负载均衡集群
- java高级工程师开放面试题集<;一>;
- 关于Unity3D中鼠标移动指定物体的解决方案
- MongoDB中设置expire过期自动删除
- Eclipse 如何创建Web项目
- AP_创建标准发票后会计科目的变化(概念)
热门文章
- 当使用junit4 对spring框架中controller/service/mapper各层进行测试时,需要添加的配置
- JS 封装一个求数组最大值的函数
- Vue.js 渲染简写样式存在的问题
- rtsp://192.168.1.198:554/PSIA/streaming/channels/101
- vscode快捷键(lua开发)
- Acdream A - Unique Attack
- 数据库-mongodb-常用命令
- SqlCommand.DeriveParameters failed
- 数据结构(Java语言)——LinkedList简单实现
- android一个弹出菜单的动画(一)