Поиск в массиве без подключения строковых функций - C (СИ)
Формулировка задачи:
Нет совпадений, что я делаю не правильно?
#include <stdio.h>
int main()
{
char str[10];
char bolt[][10] = {"table", "window", "picture", "stone"};
printf("%s", "Введите искомое слово: ");
fgets(str, sizeof(str), stdin);
for (int i = 0; i <= (sizeof(bolt)/10); i++)
{
if(str == bolt[i])
{
printf("Слово %s найдено в базе\n", str);
return 0;
}
}
printf("Слово %s не найдено в базе\n", str);
return 0;
}Решение задачи: «Поиск в массиве без подключения строковых функций»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 4
int main()
{
char bolt[M][N] = {
"table",
"window",
"picture",
"stone",
};
char str[N];
int i, j, flag;
puts("Enter source word:");
fgets(str, N, stdin);
for(i = 0; i < N; i++){//в введенном слове заменяем \n на \0
if(str[i] == '\n')
str[i] = '\0';
}
for(j = 0; j < M; j++){
flag = 0;
for(i = 0; i < N && str[i] != '\0'; i++){//сверяем слова посимвольно
if(str[i] != bolt[j][i]){
flag = 1;break;
}
}
if(!flag && str[i] == '\0' && bolt[j][i] == '\0'){//если все буквы совпали и слова закончились одновременно
printf("The array has word '%s'.", str);
exit(0);
}
}
printf("The word '%s' not found.", str);//если не было выхода из программы по совпадению
return 0; //значит слова не совпали
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h
- Определяются константы N и M (размеры массива)
- Создается массив bolt[M][N] с некоторыми строками
- Создается пустая строка str[N]
- Создаются и инициализируются переменные i, j и flag
- Выводится приглашение для ввода исходного слова
- С помощью функции fgets(), введенное слово сохраняется в строку str[N]
- В цикле заменяются все символы \n на \0 в строке str[N]
- В цикле проверяются все слова массива bolt[M][N] на совпадение с введенным словом
- Если символы в текущей позиции i совпадают, то продолжается проверка следующего символа, иначе устанавливается флаг = 1 и выполняется переход к следующей итерации внешнего цикла
- Если после проверки всех слов массива bolt[M][N] совпадение не найдено, то выводится сообщение об отсутствии искомого слова
- Возвращается 0, что означает успешный конец работы программы