Я пытаюсь написать функцию, которая ищет уникальную часть (максимум два символа) строки в массиве строк. Хотя strstr
и strchr
не работают и по какой-то причине не работают. Поэтому я прибегал к созданию чего-то, что напоминает их функцию.Функция для поиска строки в массиве строк
Мой вопрос:
Почему strstr не работает (что-то вроде strstr(lex[j],word)
) и что я здесь делаю неправильно?
Вот код для функции, которая ищет двух уникальных символов в массиве строк:
void convert(char word[])
{
int i;
for (i = 0 ; i <= strlen(word) ; i++)
{
if(word[i] >= 65 && word[i] <= 90)
{
word[i] = word[i]+32;
}
}
}
int twochar(char lex[50][50],char word[], int size,char temp[3])
{
int i,j,k,count,totlen;
convert(word);
for (i = 0 ; i < strlen(word) - 1 ; i++)
{
count = 0;
totlen = 0;
for(j = 0; j<size; j++)
{
convert(lex[j]);
totlen += strlen(lex[j]) - 1;
for(k = 0 ; k < strlen(lex[j]) - 1 ; k++)
{
if (word[i] != lex[j][k] || word[i+1] != lex[j][k + 1])
{
count++;
}
}
}
if(count = = totlen)
{
temp[0] = word[i];
temp[1] = word[i+1];
}
}
}
int main(int argc, char *argv[])
{
char lex[50][50] = {"word1","word2","word3","word4" }, word[] = "test";
char p[3];
twochar(lex,word,4,p);
printf("%c%c\n",p[0],p[1]);
return 0;
}
Это 'STRLEN (закон [J]) - 1' является receipe для Desaster. Представьте, что произойдет, если 'lex [j]' является emtpy "string" с длиной '0'. Подсказка: проверьте тип 'strlen()' return. – alk
Я удалил свой комментарий, в котором говорилось, что вы не завершаете 'temp []' с помощью 'temp [2] = '\ 0'', потому что я заметил, что вы никогда не используете' temp' или 'p' в качестве строки, только как обычную массив. –
хорошо, я знаю, что это не лучшее решение, но что может быть альтернативой? – Peter