2015-04-10 5 views
0

Итак, я пытаюсь написать функцию, которая проверяет, существует ли буква слова в массиве строк (это делает для каждой буквы в слове). Некоторое время переделывая его, я подумал, что он разбился, когда попытался использовать strcmp(). Я не знаю, что я делаю неправильно, так как я только начал изучать С, поэтому любая помощь будет оценена. Вот эта функция:Ошибка при сравнении строк в C

char SingleChar(char *lex, int wordnum,char *word){ 
int i,j,k; 
for(i=0;i<strlen(word);i++){ 
    for(j=0;j<wordnum;j++){ 
     for(k=0;k<strlen(lex[j]);k++){ 
      if(strcmp(word[i],lex[k])){ 
       return word[i]; 
      } 
     } 
    } 
} 
return 0; 
} 
+1

Включите предупреждения в своей сборке; они помогут вам выявить проблему. –

+0

Можете ли вы объяснить, что именно вы пытаетесь сделать лучше? Я не понимаю, что должна делать ваша программа. Пример ввода и вывода поможет. –

+0

Можете ли вы опубликовать некоторые сообщения об ошибках? –

ответ

1

У вас есть недоразумение о том, что означает char *. Это указатель на характер. В строке C есть только указатель на символ, который течет другими символами и нулевым терминатором. Это означает, что в вашем случае lex - это одна строка, а не список строк.

т.е.

char *a = "imastring"; означает, что это адрес последовательного куска памяти, содержащего символы [I] [м] [а] [с] [т] [г] [г] [п] [ г] [\ 0]. В C нулевой ограничитель используется для обозначения конца строки.

Это означает, что при вызове strlen(lex[j]) вы просто ссылаетесь на один символ в лексике, а затем читаете до конца строки, поэтому ваш результат будет просто уменьшаться монотонно.

Возможно, вы захотите сделать это с помощью двойной стрелки. char ** list будет указывать на адрес, который указывает на адрес, ссылающийся на блок последовательных символов.

char ** list = (char **)malloc(sizeof(char *) * 5); предоставит вам 5 последовательных адресов памяти, которые затем могут указывать на строки. И вы можете присвоить их значения следующим образом.

list[0] = a

Я надеюсь, что это помогает.

0

В C нет истинного типа струны. Строка в C - это всего лишь массив символов. Массив строк будет массивом указателей на массив символов в памяти.

Если вы хотите проверить письмо в массиве «строк». Вам понадобится указатель, который перемещается по каждой букве массива и сравнивает каждый символ.

Функция strcmp() вернет true (1) или false (0), в зависимости от того, являются ли строки равными или нет.

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

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

-

#include <stdio.h> 
#include <string.h> 

/* 
Function to check for a letter of a word 
in an array of strings */ 

void singleChar(char *word,int arrlength, char *strings[]) 
{ 
    int length = 0; 
    length = strlen(word); /* Calculates the length of the string */ 


for(int y = 0; y < arrlength ; y++) /*Increments to the next word in the    array */ 
{ 
    for(int i=0; i <= length ; i++) /*increments to the next letter of the  word you want to check */ 
    { 
    for(int x=0; x < strlen(strings[y]) ; x++) /*Increments x based on the  length of the string */ 
    { 
     char *p = strings[y]; 
     if(word[i] == p[x]) /*Compares the the first letter of both strings */ 
     { 
     printf("The letter %c exists.\n", word[i]); 
     } 
    } 
    } 
    } 
} 

int main (void) 
{ 
/*Example */ 

char *p = "Hello"; 
char *a[2]; 
a[0]="Hello"; 
singleChar(p, 1,a); 


} 
+0

Массив строк также может быть двумерным массивом 'char', где каждая строка массива представляет собой строку с завершающим нулем (это не длиннее определенной длины каждой строки в массиве). Функция 'strcmp (a, b)' возвращает отрицательное значение, если 'a' сортирует перед' b', ноль, если строки равны, и положительное значение, если 'a' сортируется после' b'. Он не возвращает логическое значение. –

0

Не вижу массив строк ... Файл C должен выглядеть примерно так:

#include <stdio.h> 
char SingleChar(char *lex, int wordnum, char *word){"your function in here"}; 

int main(){ 
    // Declare your variables here 
    // Call your function here SingleChar(params) 
    return 0; 
} 

для сравнения персонажей:

if(word[i]==lex[k]){ 
    return word[i]; 
    break; 
} 

Не совсем уверен, что вы пытаетесь сделать с вашей функцией, кроме этого. Вы должны быть более конкретными, я не вижу ваш массив строк ввода.