Я пытаюсь реализовать дерево суффиксов.
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;