Форум программистов, компьютерный форум CyberForum.ru

Узнать, есть ли в строке те или иные символы... - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Matrasa
 Аватар для Matrasa
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 40
11.01.2011, 14:08     Узнать, есть ли в строке те или иные символы... #1
Всем привет, делаю прогу которая выполняет арифметические операции над римскими числами. Надо бы, чтобы она отслеживала правельность римских чисел. Тоесть в вводимой строки должны быть только символы X I V L C и М

C++
1
2
3
char* c;
 
if ((c[i] != "X")) & (c[i] != "I"...) {} //Не работает
А какие еще могут быть варианты?

C++
1
strcmp(c[i], "X") == 0 //Компилятор ругается, по видимому ему не нравится char*
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2011, 14:08     Узнать, есть ли в строке те или иные символы...
Посмотрите здесь:

Есть ли одинаковые символы в строке C++
написать функцию, которая в строке заменяет все символы верхенго регистра в символы нижнего регистра C++
C++ Написать функцию которая в строке заменяет все символы верхнего регистра в символы нижнего регистра
C++ Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить символы B в порядке, обратном к алфавитном
C++ В строке удалить все символы не являющиеся буквами или цифрами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.01.2011, 14:16     Узнать, есть ли в строке те или иные символы... #2
Matrasa, вы символ сравниваете со строкой. Так заработает:

C++
1
2
3
char* c;
 
if ((c[i] != 'X')) & (c[i] != 'I'...) {} //Работает ))
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.01.2011, 14:31     Узнать, есть ли в строке те или иные символы... #3
Символьные константы в С обозначаются одинарными кавычками. 'X' -- символьная константа, "X" -- строковая константа.

Конкатенция (булевое "И") в С обозначается двумя амперсандами (&&), а один амперсанд (&) это битовая конкатенция. Оно тут, конечно, сработает, но не логично.

Если вы сравниваете символ с символом, вам не нужно использовать функцию, сравнивающую две строки.
Сравнивайте c[i] == 'X'.

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 <string.h>
 
int HasOtherSymbols(const char *a_string, const char *valid_chars) {
  int counter = 0;
  for (int i = 0; i < strlen(a_string); ++i) {
    int match = 0;
    for (int j = 0; j < strlen(valid_chars); ++j)
      if (a_string[i] == valid_chars[j]) {
        match = 1;
        break;
      }
    counter += (match == 1) ? 0 : 1;
  }
  return counter;
}
 
int main(int argc, char *argv[]) {
  char *a_string = "ivx3";
 
  printf("String '%s' has %d incorrect symbol(s).\n", a_string, HasOtherSymbols(a_string, "ivxl"));
 
  return 0;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.01.2011, 14:44     Узнать, есть ли в строке те или иные символы... #4
lemegeton, да, на "И" даже внимания не обратил...
Yandex
Объявления
11.01.2011, 14:44     Узнать, есть ли в строке те или иные символы...
Ответ Создать тему
Опции темы

Текущее время: 05:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru