Как сравнить две переменные типа char * - PullRequest
1 голос
/ 14 мая 2010

Предположим, у нас есть следующий метод (он есть в коде c):

const char *bitap_search(const char *text, const char *pattern)

Мой вопрос: как я могу сравнить текст и шаблон, если они char? Этот метод похож на проблему с подстрокой, но я немного запутался, могу ли я написать в терминах char такой код? if (text[i]==pattern[i])? Смотри, я интересуюсь этим алгоритмом в Java http://en.wikipedia.org/wiki/Bitap_algorithm Как реализовать это в Java?

R = malloc((k+1) * sizeof *R);

и, пожалуйста, помогите мне перевести этот код в Java так у нас есть две строки текста? как "я люблю компьютер, это очень важно" а скороговорка "компьютер очень"? Кто-нибудь может объяснить мне, что мы имеем вместо символа?

Ответы [ 5 ]

3 голосов
/ 14 мая 2010

Я не уверен, что именно вы спрашиваете, но если вы хотите найти pattern в text, то strstr(text, pattern). Или, если вы хотите сравнить text и pattern, то strcmp(text, pattern) (обратите внимание, что возвращается 0, когда text и pattern равны).

Редактирование на основе обсуждения в комментариях: Если вы хотите спросить, как реализовать индексацию отдельных символов в Java, то замените (в Java) text.charAt(i) на C text[i]. В C символы в строках могут быть проиндексированы непосредственно как массив, в Java нужно вызвать правильный метод в String .

Редактировать 2 : Код C const char * может быть заменен в Java на String.

В C malloc используется для выделения памяти; в этом случае он выделяет место в массиве R для m+1 элементов. Таким образом, BIT *R можно удалить и R = malloc((m+1) * sizeof *R); заменить на boolean[] R = new boolean[m + 1];. При присвоении значений в массив R подставьте true для 1 и false для 0.

2 голосов
/ 14 мая 2010

Вы можете попробовать это:

2 голосов
/ 14 мая 2010

Я думаю, вы не понимаете разницу между char и char *. В Си нет встроенного строкового типа. Строки представляются в виде символьных массивов с нулевым символом в конце, что означает, что последний символ строки должен быть \0. Поэтому char - это один символ, а char * - указатель на массив символов, т.е. е. строка. А это значит, что прекрасно говорить if (text[i] == pattern[i]).

0 голосов
/ 14 мая 2010

Вы должны использовать strncmp(). Синтаксис выглядит примерно так:

int strncmp( const char *str1, const char *str2, size_t count );

Это лучший и более безопасный способ сравнения строк, но, конечно, вам нужно знать их длину или хотя бы минимальную длину между ними.

0 голосов
/ 14 мая 2010

Вам, вероятно, нужно strcmp() или strpos().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...