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("\n");
    }
    printf("\n");
    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次\n",j++,a[i],c[i]);
    }
}

他用了一個統計標志,這個很適合我現在的這個問題,也希望能對大家有用吧,謝謝了。

下面是CSDN上一個很不錯的關於C++的各類總結,這個鏈接是字符串的。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM