В строке символов посчитать количество скобок различного вида - C (СИ)
Формулировка задачи:
В строке символов посчитать количество скобок различного вида.
Моя наработка ниже.Вместо того что хочу получаю чушь...
Помогите пожалуйста.
#include <stdio.h>
#include <locale.h>
#include <string.h>
char s[]="";
int n=0;
int i;
int main()
{
setlocale(LC_ALL,"Rus");
printf("Введите строку:\n");
gets(s);
int k=strlen(s);
//Подсчёт всего задания веду через переменную n
for (i=0;i<=k;i++)
{
if(s[i]=='('||s[i]==')'||s[i]=='{'||s[i]=='}'||s[i]=='['||s[i]==']') n++;
}
printf("%d",n);
}Решение задачи: «В строке символов посчитать количество скобок различного вида»
textual
Листинг программы
#include <iostream>
void main ()
{ char line[80], brackets[]="[{()}]";
int count=0;
std::cout<<"Input string"<<std::endl;
std::cin>>line;
for (int i=0; i<strlen(line); i++)
if (strchr(brackets,line[i])) count++;
std::cout<<"All brackets "<<count<<std::endl;
system ("pause");
}
Объяснение кода листинга программы
В этом коде:
- Объявляется массив символов
lineразмером 80 и массив символовbracketsразмером 10. - Инициализируется переменная
countнулем. - Выводится сообщение
Input stringи производится ввод строки с клавиатуры в массивline. - Происходит цикл по всем символам строки
line. - Если текущий символ является одним из символов скобок
[{()}], то переменнаяcountувеличивается на единицу. - После окончания цикла выводится количество найденных скобок.
- Производится пауза, чтобы пользователь мог увидеть результат. Ошибки в коде:
- В языке C функция
mainдолжна возвращать значение типаint, а неvoid. - В языке C строки следует сравнивать с использованием функции
strcmp, а неstrchr. - В цикле есть условие
i<strlen(line), которое является лишним, так как по умолчанию цикл выполняется до тех пор, покаiменьшеstrlen(line). - Нет проверки на то, что введенная строка была корректной (содержит только символы
[{()}]). - Нет обработки ошибок при вводе и выводе данных.