zoukankan      html  css  js  c++  java
  • C++下面关于字符串数组的一些操作

    今天在写一个搜索引擎的分词系统,是很简单的那种,但是居然费了我一天的时间还没完成,晚上估计还得弄一会了,但是在这个过程中,遇到了集中关于字符串数组的操作,值得和大家分享一下。

    首先是关于统计字符串数组元素的个数:

    字符串数组不同于整型数组,每一个字符串所占的空间是不一样的,不能用sizeof简单的计算出来。下面是示例代码:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        string str[] = {"abfafawfefw","defg","32121","Miss","11111"};
        cout << sizeof(str) / sizeof(str[0]);
        return 0;
    }

    字符串数组存取方式采用了对齐原则,占用空间少的向占用空间多的靠齐,首先使用sizeof(str)首先获得所用的所用字节数,使用sizeof(str[0])再计算数组中一个元素平均占用的字节数。然后除一下,就是元素个数,但是注意,被除的那个元素应该是所占空间最大的那个。

    然后是关于统计字符串数组各个元素出现的次数:

    这个是我用在统计分词后得到的词组各自的频次的,但是不知道出了什么问题,一直实现不了,虽然我知道这个确实是很简单的一个问题。

    我通过大百度找到了一种统计次数的方法,他是统计整型数组的,但是感觉很不错,但是我暂时还没有验证,先贴出来吧:

    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
        int a[100],b[100],c[100]={0},i,j;
        //a数组放随机数
        //b数组放是否被统计的标志,1未统计,0已统计
        //c数组放对应a数组中随机数出现的次数
        for(i=0;i<100;i++)
        {
            a[i]=rand()()%21;//产生0~20的随机数
            b[i]=1;//未统计
            printf("%5d",a[i]); //打印a数组的值
            if((i+1)%10==0)     //一行打印10个数
                printf("
    ");
        }
        printf("
    ");
        for(i=0;i<100;i++)
        {
            if(b[i])  //若a[i]未被统计
            {
                c[i]++;  //次数加1
                for(j=i+1;j<100;j++)//从下一个开始向后查找
                    if(a[j]==a[i]) //若相等
                    {
                        c[i]++;   //则次数增1
                        b[j]=0;   //改为已统计
                    }
            }
        }
        for(i=0,j=1;i<100;i++)
        {
            if(c[i])  //若某随机数出现了,则打印其值和出现次数
                printf("%3d:%5d 出现 %3d次
    ",j++,a[i],c[i]);
        }
    }

    他用了一个统计标志,这个很适合我现在的这个问题,也希望能对大家有用吧,谢谢了。

    下面是CSDN上一个很不错的关于C++的各类总结,这个链接是字符串的。

    http://blog.csdn.net/wangfengwf/article/details/11496141

  • 相关阅读:
    细说MS事务管理
    大话设计模式(含源码)下载
    CSS基础到提高(PPT、视频、源代码),网页布局不用愁
    Android开发中Layout中明明改了id,但是还出现"cannot be resolved or is not a field"的原因
    读《OO真经》有感,以及我自己的关于哲学的体会
    Web服务小试牛刀
    在Android的RaletiveLayout中,如果空间的相对位置矛盾将不显示此控件
    .net 面试题2
    敏捷软件转
    中英文标点
  • 原文地址:https://www.cnblogs.com/sexybear/p/Cpp_string.html
Copyright © 2011-2022 走看看