把一个单词分成更小的部分

Dividng a word into smaller segments

本文关键字:单词 一个      更新时间:2023-10-16

我正在尝试实现一个后缀树。

int _tmain(int argc, _TCHAR* argv[])
{
    std::string text;
    cin >> text;
    int n = text.size();
    std::string first_array[sizeof(text) / sizeof(text[0])];
    for (int i = 0; i < text.size();i++)
    {
        first_array[i] = text.substr(i, n - i);
    }
    int T = sizeof(first_array) / sizeof(first_array[0]);
    sort(first_array, first_array + T);
    cout << endl << "The sorted tree:" << endl;
    for (int j = 0; j < sizeof(first_array) / sizeof(first_array[0]); j++)
        cout << j+1 << " | " << first_array[j] << endl;
}

这是我的密码。例如,如果用户输入"你好",那么程序应该并且我希望它向我显示以下内容:

1 | ello
2 | hello
3 | llo
4 | lo
5 | o

但是,它却向我展示了这一点(这是错误的,不是我想要的):

1  |
2  |
3  |
4  |
5  |
6  |
7  |
8  |
9  |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | ello
25 | hello
26 | llo
27 | lo
28 | o

sizeof(std::string)报告C++字符串对象的大小(显然是28字节大),这与它所包含的字符串的实际长度无关。使用".size()"成员函数计算字符串中包含的字符数并调整数组大小。

另一种选择是使用std::vector<std::string>,并让对内存管理进行排序:

std::vector<std::string> first_array;
for (int i = 0; i < text.size();i++)
         first_array.push_back( text.substr(i, n - i) );

为了完整起见,这里有一个工作程序:

std::string text;
cout << "Please enter your text: ";
cin >> text;
std::vector<std::string> first_array;
for (int i = 0; i < text.size();i++)
    first_array.push_back( text.substr(i, n - i) );
sort(first_array.begin(), first_array.end());
cout << endl << "Suffix Tree (alphabetical order):" << endl;
std::vector<std::string>::iterator  ptr;
for(ptr=first_array.begin(); p!=first_array.end(); ptr++)
    cout << *ptr;
cout << endl;
相关文章: