Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 8

Определить, является ли последовательность идентификатором

29.12.2011, 19:36. Показов 3749. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Пользователь вводит последовательность символов и программа определяет является ли эта последовательность идентификатором
Я знаю как реализовать этот код на Pascal. В С я новичок. Помогите форматнуть его в С!

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Program Lab;
 Uses crt;
 Var
  st:string;
  k:integer;
 Procedure Ident(i:integer; f:string);
  Var
   j,s:integer;
  Begin
   s:=0;
  for j:=1 to i do
   begin
    if (('a'<=f[j]) and (f[j]<='z')) or ('0'<=f[j]) and (f[j]<='9')
    or ((f[j]='_')) or (('A'<=st[j]) and (st[j]<='Z')) and (f[j]<>'')
     then s:=s+1;
    end;
   if s=i
    then
     writeln('вводимая последовательность является идентификатором')
    else
     writeln('вводимая последовательность не является идентификатором');
  end;
 Begin
  ClrScr;
  Writeln('введите последовательность');
  Readln(st);
  k:=Length(st);
  if (('a'<=st[1]) and (st[1]<='z'))  or (('A'<=st[1]) and (st[1]<='Z'))
   then
    Ident(k,st)
   else
    writeln('вводимая последовательность не является идентификатором');
End.
Добавлено через 18 часов 13 минут
Вот у меня что-то получилось, но все равно есть 2 ошибки. Не могу понять в чем дело?http://codepad.org/ifV1Xggf

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
char st[10000];
int k;
bool Ident(int i, char* f)
{
int j;
int s=0;
for(j =0; j < i; j++)
 if (! (('a'<=f[j]) and (f[j]<='z')) or ('0'<=f[j]) and (f[j]<='9')
  or ((f[j]='_')) or (('A'<=f[j]) and (f[j]<='Z')) and (f[j]<>'')))
return false;
return true;
}
 
int main()
{
printf("Введите строку \n");
gets(st);
if(Ident(strlen(st), st))
printf("Строка является идентификатором");
else
printf("Строка не является идентификатором");
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2011, 19:36
Ответы с готовыми решениями:

Выяснить, является ли текст идентификатором
Помогите, пожалуйста! Дан текст. Выяснить является ли он идентификатором. Идентификатор- последовательность букв и цифр, которые...

Определить, является ли последовательность правильной
Помогите пожалуйста, правильно написать эту последовательность... Я не могла понять, как должен выглядеть код:cry: Заранее спасибо!!!

Определить является ли последовательность символов идентификатором
Помогите, пожалуйста с заданием... Задание: Определить, является ли последовательность символов, находящихся в текстовом файле...

10
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
29.12.2011, 19:41
Цитата Сообщение от SOTNER Посмотреть сообщение
f[j]='_'
C++
1
f[j]=='_'
Добавлено через 38 секунд
Цитата Сообщение от SOTNER Посмотреть сообщение
<>
!= писать надо

Добавлено через 1 минуту
Цитата Сообщение от SOTNER Посмотреть сообщение
and
&& писать надо

Цитата Сообщение от SOTNER Посмотреть сообщение
or
|| писать надо
1
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 19:45
В Си нет bool. Либо _Bool, либо int пользуйтесь.
Разберитесь со скобками в 9-10 строках. and и or замените на && и || соответственно. <> на !=. Не понял, чего вы пытались добиться f[j] <> ''. Да и вообще само условие if стремноватое, даже на паскале.
Возвращайте не true/false а 1/0.
1
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 8
29.12.2011, 19:55  [ТС]
Все равно 2 ошибки http://codepad.org/owAKc0vp

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
char st[10000];
int k;
int Ident(int i, char* f)
{
int j;
int s=0;
for(j =0; j < i; j++)
 if (! (('a'<=f[j]) && (f[j]<='z')) || ('0'<=f[j]) && (f[j]<='9')
  || ((f[j]=='_')) || (('A'<=f[j]) && (f[j]<='Z')) && (f[j]!='')))
return 0;
return 1;
}
 
int main()
{
printf("Введите строку \n");
gets(st);
if(Ident(strlen(st), st))
printf("Строка является идентификатором");
else
printf("Строка не является идентификатором");
return 0;
}
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 19:58
Цитата Сообщение от SOTNER Посмотреть сообщение
(f[j]!='')
Я вам сказал уже, это, что бы вы под этим не подразумавали, не прокатит.

Добавлено через 33 секунды
И хидер для strlen подключите.

Добавлено через 24 секунды
C
1
#include <string.h>
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
29.12.2011, 19:58
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int isValidFirstSymbol(char c) {
  return (c >= 'a' && c <='z') || (c >= 'A' && c <='Z') || (c == '_');
}
 
int isValidSymbol(char c) {
  return (c >= 'a' && c <='z') || (c >= 'A' && c <='Z') ||
    (c >= '0' && c <='9') || (c == '_');
}
 
int isValidIdentifier(const char *id) {
  const char *i = id;
  if (!isValidFirstSymbol(*i)) return false;
  for (++i; *i != '\0'; ++i)
    if (!isValidSymbol(*i)) return false;
  return true;
}
 
int main(int argc, char *argv[]) {
  printf("%s\n", (isValidIdentifier("1BmV2")) ? "valid" : "invalid");
  printf("%s\n", (isValidIdentifier("_01_")) ? "valid" : "invalid");
  return 0;
}
1
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
29.12.2011, 20:00
C
1
2
3
#include  <ctype.h>
...
if( (isapha(f[j])) || (isdigit(f[j])) || (f[j]=='_') )
1
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 8
29.12.2011, 20:07  [ТС]
Что то не очень понятно. Не могли бы Вы полностью код выложить от начала до конца?
0
35 / 35 / 11
Регистрация: 25.05.2010
Сообщений: 211
29.12.2011, 20:10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include  <ctype.h>
char st[10000];
int k;
bool Ident(int i, char* f)
{
int j;
int s=0;
for(j =0; j < i; j++)
 if( (isapha(f[j])) || (isdigit(f[j])) || (f[j]=='_') )
   return false;
return true;
}
 
int main()
{
printf("Введите строку \n");
gets(st);
if(Ident(strlen(st), st))
printf("Строка является идентификатором");
else
printf("Строка не является идентификатором");
return 0;
}
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
29.12.2011, 20:13
Цитата Сообщение от SOTNER Посмотреть сообщение
Что то не очень понятно. Не могли бы Вы полностью код выложить от начала до конца?
Я же тебе уже привел пример кода. Для красоты, можешь заменить обычные сравнения на функции из ctype.h, как предложил vetal10.
1
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 8
29.12.2011, 20:24  [ТС]
lemegeton

А как прописать, чтобы пользователь сам водил данные?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2011, 20:24
Помогаю со студенческими работами здесь

Определить, является ли вводимая последовательность символов идентификатором
Определить, является ли вводимая последовательность символов идентификатором.

Определить, является ли последовательность символов, находящаяся в текстовом файле, идентификатором
Определить, является ли последовательность символов, находящаяся в текстовом файле, идентификатором.

Определить является ли строка допустимым идентификатором
Написать программу на языке С ++. B программе определить функцию lsIdent(S) целогo типа , проверяющую , является ли строка S , допустимым...

Определить, является ли заданная строка идентификатором
Здравствуйте. Возможно, кто-то знает как решить такую задачку Есть строка, определить является ли она идентификатором

Определить, является ли заданный текст правильно построенным идентификатором
Задание - определить является ли заданный текст правильно построенным идентификатором(ппи) C#, вопрос, как это сделать? И что это вообще...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru