Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите пожалуйста решить проблему со словами.

Ответить
Настройки темы
C/C++ - Помогите пожалуйста решить проблему со словами.

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Проблема такая - я не пойму как например в условии if, например если я ввожу с клавиатуры слово, чтобы он в уловии if отвечал, но не дает, так как он кроме цифр и нескольких символов ничего не хочет брать, буквы задал при помощи ' ' - единичных кавычек, и типом char. Но проблема в том, что он берет только где то до 4-х символов, а если написать больше, то будет ошибка - error C2015: too many characters in constant. Не понимаю в чем дело.

Отправлено: 22:57, 13-05-2010

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Ну За Путаницу Извините... Ну А Пример Уже Привел Drongo !!!

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 10:21, 16-05-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Drongo:
char *ch; // Можно ввести строку символов или один символ »
Ну, я так понял, если использовать с *, я могу до нескольких символов вводить. Ну, я вроде все правильно понял. Ну, мне вообщем мне нужен такой код. Спасибо конечно большое, я многое понял, но просто здесь, почему то, ну не хочет он, хотя я думаю правильно написал. Кто либо, или вы, просто покажите код, в котором можно вводить слово, и это для меня более исправит сразу все ошибки и мне понятно будет. Только прокомментируйте, если не трудно, то, что новое, вы не говорили, а все остальное не надо. Мне просто намного легче разобраться, если это готовый код. А про массив, да я знаю, что это такое, это так же называется константой, я прав ? Но с константой я, сколько не пробовал - и так, и сяк, все равно пишет ту же самою ошибку. Не понимаю, почему нельзя было сделать не один символ для типа char, а например 260 хотя бы, чтоб никто не замудрялся - этого хватит думаю многим. А кому мало, какой нибуть - long char - и символов в несколько раз больше. Зачем ограничивать не понимаю. Если ради экономии размера, то тут он не очень большой вроде, да и могли бы создать одну для экономии, другую нет, как например дело с цифровыми типами. Вот то, чего я добиваюсь, но выдает ошибку:

Код: Выделить весь код
#include <iostream>
using namespace std;

main()
{
   char*q1;

   cout << "Enter Char = ";
   cin >> q1;
   if (*q1 == 'water') {
      cout << "1";
     }
   else {
     cout << "2";
     };

   cin >> q1;

return 0;
}

Последний раз редактировалось Drongo, 16-05-2010 в 12:56. Причина: Тег код - #


Отправлено: 12:23, 16-05-2010 | #12


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Массив - это не константа! на сколько я помню с++ то размер массива можно задавать только при помощи констант! константы это те данные которые невозможно изменить ни в каком месте программы кроме как в объявлении! а массив это как бы набор данных одного и того же типа!

Код: Выделить весь код
void main()
{
       char q1[100]     // Объявление переменной q1 длинной 100 символов
       cout << "Введите ..."
       cin >> q1;
       if (q1 == "water")
       {
                cout << "1";
       }
       else
       {
                 cout << "2";
        }
}
З.Ы. Извините за синтаксические ошибки
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:22, 16-05-2010 | #13


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата dakishi:
Не понимаю, почему нельзя было сделать не один символ для типа char, а например 260 хотя бы »
Это вам надо посмотреть табличку кодов ANSII-символов, так сложилось что символы с кодом от 0 до 128 жёстко прописаны, это символы латиницы, верхнего\нижнего регистра, знаки препинания и т.д. А символы с кодом от 128 до 255 отданы под национальные стандарты. Char - это один символ. Нужна строка символов? Можно использоватль символьный указатель
Код: Выделить весь код
char *name;
Или подключить библиотеку
Код: Выделить весь код
#include <string>
и использовать тип переменной - string
Код: Выделить весь код
string mystring;
Одинарные кавычки используются когда нужно проверить какой-то один символ
Код: Выделить весь код
'A'
а парные, когда нужно проверить строку символов. Дело в том что символьная строка заканчивается нулевым символом '\0'. В общем я сам немного запутался...

Код: Выделить весь код
#include <iostream>
using namespace std;
#include <cstring>

main()
{
   const int size = 510;  // размер символьного массива ввода
   char q1[size]; // Массив с размером в 510 символов
   char q2[] = "water"; // Проверяемое слово

   cout << "   Enter Massiv 510 Simvolov!\n"; // приглашение ввода
   cin.getline(q1, size, '\n');  // функция ввода
   cout << q1 << endl;   // ПРОВЕРКА: введённого массива, вывод массва

   if (strcmp(q1, q2) == 0) { // strcmp - функция сравнивания строк.
      cout << "1" << endl;     // Если возвращает ноль - строки равны.
      cout << q1;              // Если возращает "-1" - то строка q1 Больше q2
     }                         // Если возращает "1" - то строка q1 Меньше q2
   else {
     cout << "2" << endl;
     cout << q1;
     };

   cin >> q1;

return 0;
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:36, 16-05-2010 | #14


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата Drongo:
Можно использоватль символьный указатель
Код:
char *name;
Или подключить библиотеку
Код:
#include <string>
и использовать тип переменной - string »
Правильным способом будет использование объектов класса string
Символьные указатели - это настолько сложная в понимании и опасная в использовании тема, что новичкам её лучше не касаться.

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:34, 17-05-2010 | #15


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо большое! Я все понял. Вы мне очень помогли. Ну, я пока что не дошел до массивов. Я дошел до темы "функции", в которой пока копаюсь, она очень длинная. Да, со string легче, но я обязательно освою и тот способ, с массивом, когда дойду до него. Еще, способ с массивом так много времени тратит, неужели он такой полезный ? А то по сравнению с другим, как то очень долго, хоть и профессионально, он наверно много других возможностей дает, но все же.

Отправлено: 18:02, 17-05-2010 | #16


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата dakishi:
Я дошел до темы "функции", в которой пока копаюсь, она очень длинная. »
Собственно говоря, я не понимаю, почему во многих учебниках в качестве "простых примеров" используют такие, где много подводных камней.
Для экспериментов лучше использовать значения типа int (цифры)


Цитата dakishi:
Еще, способ с массивом так много времени тратит, неужели он такой полезный ? »
Видишь ли в чём дело.
Функции работы символьными массивами работают немного быстрее, но программисту при этом самому нужно контролировать операции выделения памяти и проверку длины строк. При этом малейшая ошибка может повредить данные самым непредсказуемым образом.
Вот простой пример
Код: Выделить весь код
const char *sourse = "Сорок тысяч обезьян в одно место сунули банан"; //Указатель на массив символов, размещённый в области констант
char *target = malloc (32); // Указатель на область памяти размером 32 байт, выделенную в "куче" под массив символов
ctrcpy (target, sourse); // Функция копирования строки из области памяти по адресу sourse в область памяти по адресу target
Функция strcpy копирует информацию из одной области памяти в другую до тех пор, пока не встретит ноль (не символ '0' с кодом 48, а специальный символ с кодом 0), который означает конец строки - данный символ автоматически добавляется в конец исходной строки. Однако исходная строка имеет размер 41 байт, а конечная - всего 32. Таким образом, функция копирования строки затрёт 9 "лишних" байт,*необратимо повреждая информацию, которая была выделена другим объектам этой программы.
В*результате при работе программы неизбежно возникнет множество ошибок, которые "неизвестно почему" проявятся в других участках кода. Выявить причину такой ошибки - дело очень сложное. Так что лучше сразу использовать объекты типа string, которые обеспечивают автоматическую проверку размеров строк и выделения областей памяти. Благо мощность ЭВМ позволяет это делать.
А символьные указатели используют только в тех участках программы, где требуется максимальное быстродействие. Но создание таких программ - удел профессионалов, которые хорошо понимают, что и как работает

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Последний раз редактировалось Delirium, 18-05-2010 в 03:44. Причина: El Scorpio, в качестве примеров выбирайте более цензурные выражения.


Отправлено: 02:11, 18-05-2010 | #17


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо большое!

Отправлено: 21:50, 19-05-2010 | #18



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите пожалуйста решить проблему со словами.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Route/Bridge - Помогите решить проблему alex.t Сетевые технологии 1 10-05-2010 19:47
Помогите решить проблему shron Сетевые технологии 2 05-08-2007 02:11
Помогите решить проблему!!!! Guest Сетевые технологии 1 14-10-2004 23:46




 
Переход