Во время второго вызова strtok() код выдает следующую ошибку: Недопустимое чтение размера 1.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Во время второго вызова strtok() код выдает следующую ошибку: Недопустимое чтение размера 1.

Сообщение Anonymous »

Я новичок в C++ и не понимаю, почему код не продолжает токенизацию текстового массива, а вместо этого выдает ошибку.
Я подозреваю, что проблема может быть в том, что передачи токена ptr в середине токенизации, из-за чего код просто сдается или что-то в этом роде.
Задача была такая:
Напишите функцию, которая будет удалять все слова в заданном тексте, встречающиеся более одного раза.

Также обратите внимание, что СЛОВО — это последовательность букв, разделенных пробелом.
Примечание. Программа должна использовать указатель.
Ввод:

Первая строка содержит одну строку длиной не более 1000 символов с пробелами.

Каждое слово не длиннее 30 символов.
Вывод:

Форматированный текст.

#include
#include
#include
using namespace std;

bool compareThem(char* lhs, char* rhs) {
if (strcmp(lhs, rhs) != 0) {
return false;
}
int len = strlen(lhs);

for (int i = 0; i < len; i++) {
if (!(lhs == rhs)) {
return false;
}
}
return true;
}

bool isDuplicate(char* possibleDuplicate, char* result) {
char* soFar = new char[strlen(result) + 1];
strcpy(soFar, result);

char* word = strtok(soFar, " ");
while (word != NULL) {
if (compareThem(possibleDuplicate, word)) {
delete[] soFar;
return true;
}
word = strtok(NULL, " ");
}

delete[] soFar;
return false;
}

void removeDuplicates(char* text) {
char* result = new char[1000];
result[0] = '\0';

char* word = strtok(text, " ");
while (word != NULL) {
if (!isDuplicate(word, result)) {
strcat(result, word);
strcat(result, " ");
}
word = strtok(NULL, " ");
}

cout

Подробнее здесь: https://stackoverflow.com/questions/791 ... or-invalid
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»