Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы о целочисленных переменных и о сим.массиве 
:(
    Опции темы
goodwen053
Дата 5.4.2011, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



Здравствуйте, я новичок в С++, у меня есть 3 вопроса:

1. Как задать условие: если введено не число?

2. Есть трёхзначное число типа int, как мне сложить все его цифры?

3. Нужно ввести текст, он может быть разной длины, как сделать так, чтобы размер символьного одномерного массива куда заносится текст автоматически принял нужную размерность? И как  с определённого элемента в одномерном символьном массиве сдвинуть вправо все остальные элементы, при этом так же увеличивая его размерность?
PM MAIL   Вверх
alexvs11
Дата 5.4.2011, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(goodwen053 @  5.4.2011,  19:15 Найти цитируемый пост)
1. Как задать условие: если введено не число?

в консоли сделать
if( 1 != scanf( "%d", ..
или 
int a;
if( (cin >> a).fail() )

 
PM MAIL   Вверх
Vard
Дата 5.4.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



Цитата(goodwen053 @ 5.4.2011,  19:15)
2. Есть трёхзначное число типа int, как мне сложить все его цифры?

3. Нужно ввести текст, он может быть разной длины, как сделать так, чтобы размер символьного одномерного массива куда заносится текст автоматически принял нужную размерность? И как  с определённого элемента в одномерном символьном массиве сдвинуть вправо все остальные элементы, при этом так же увеличивая его размерность?

2. Воспользоваться операцией получения остатка от деления и целочисленным делением

Код

int num = 387;
int a, b, c;
int result;
 
a = num / 100;               // a = 3;
b = (num % 100) / 10;         // b = 8
c =  ((num % 100) % 10) ;     // c = 7;

result = a + b + c;


3. Я думаю, тут необходимо динамическое выделение памяти (malloc и free либо new, delete)

Это сообщение отредактировал(а) Vard - 5.4.2011, 23:40
PM MAIL   Вверх
goodwen053
Дата 5.4.2011, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



alexvs11, благодарю за помощь, всё заработало.

Vard, так же благодарю за помощь, со вторым вопросом, у меня всё получилось, но я не совсем понимаю вот эту запись:

Код

b = (number % 100) / 10;
c = ((number % 100) % 10) ;

Что здесь обозначает знак "%"?




PM MAIL   Вверх
mes
Дата 5.4.2011, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(goodwen053 @  5.4.2011,  20:50 Найти цитируемый пост)
обозначает знак "%"

остаток от деления.. 


--------------------
PM MAIL WWW   Вверх
volatile
Дата 6.4.2011, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



кардинальное решение 2-го вопроса  smile 
Код

unsigned int sum_digits(unsigned int v)
{
   unsigned int res = 0;
   while (v)
   {
      res += v % 10;
      v /= 10;
   }
   return res;
}

PM MAIL   Вверх
mes
Дата 6.4.2011, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(volatile @  6.4.2011,  00:00 Найти цитируемый пост)
 while (v)
   {
      res += v % 10;
      v /= 10;
   }
   

или:
итерацию по v также вынести в оглавление цикла :
Код

for (; v; v/=10)
 res+= v%10;

 smile 


--------------------
PM MAIL WWW   Вверх
goodwen053
Дата 6.4.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



Благодарю за помощь, всё понял. А как быть с 3-вопросом? Я, как понимаю, нужно через указатели, а как увеличивать размерность символьного массива? Может для 3-вопроса есть какие либо функции по работе со строками?
PM MAIL   Вверх
baldina
Дата 7.4.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(goodwen053 @  5.4.2011,  19:15 Найти цитируемый пост)
Нужно ввести текст, он может быть разной длины, как сделать так, чтобы размер символьного одномерного массива куда заносится текст автоматически принял нужную размерность? И как  с определённого элемента в одномерном символьном массиве сдвинуть вправо все остальные элементы, при этом так же увеличивая его размерность? 

Цитата(goodwen053 @  6.4.2011,  21:11 Найти цитируемый пост)
 Может для 3-вопроса есть какие либо функции по работе со строками? 

в С++ есть std::string
Код

// ввести строку. string сам заботится о распределении памяти
std::string s;
std::cin >> s;

// вставить символ 'A' в позиции 3
s.insert (3, 'A');

// получить С-строку в виде указателя
const char *ptr = s.c_str ();
// получить длину строки
size_t len = s.size ();


Это сообщение отредактировал(а) baldina - 9.4.2011, 15:28
PM MAIL   Вверх
mes
Дата 7.4.2011, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(baldina @  7.4.2011,  16:51 Найти цитируемый пост)
// получить С-строку в виде указателя
char *ptr = s.c_str ();

http://cplusplus.com/reference/string/string/c_str/
a const ? smile 


Это сообщение отредактировал(а) mes - 7.4.2011, 17:55


--------------------
PM MAIL WWW   Вверх
goodwen053
Дата 7.4.2011, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



Код

// ввести строку. string сам заботится о распределении памяти
std::string s;
std::cin >> s;


Я вот если так пишу, и уже в консоли набираю какой либо текст с пробелами, то он запоминает только до первого пробела. Я пытаюсь сделать вот так:
Код

std::string text;
std::cin.getline(text,sizeof(text));

Выдаёт ошибку: [C++ Error] Unit1.cpp(16): E2285 Could not find a match for 'istream::getline(string,unsigned int)' и ссылается на вторую строку.

А когда пишу вот эту строку в коде:
Код

text.insert (3, 'A');


Выдаёт ошибку ссылаясь на эту строку в коде:[C++ Error] Unit1.cpp(19): E2285 Could not find a match for 'string::insert(int,char)'
Как мне исправить эти ошибки?Компилятор у меня С++ Builder Borland 6.

И не совсем понимаю вот эту строку:
Код

// получить длину строки
size_t len = s.size ();

Здесь переменная, где записана длина строки - это len, или  size_t?

Это сообщение отредактировал(а) goodwen053 - 7.4.2011, 19:45
PM MAIL   Вверх
mes
Дата 7.4.2011, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



site_t - тип ( аффикс _t  даже пытается подсказать smile )


--------------------
PM MAIL WWW   Вверх
baldina
Дата 9.4.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(mes @  7.4.2011,  17:55 Найти цитируемый пост)
a const ?

 smile 
PM MAIL   Вверх
goodwen053
Дата 10.4.2011, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.4.2011

Репутация: нет
Всего: нет



На счёт третьего вопроса я часть сделал (код ниже), но у меня задание, ввести текст (предложения заканчивающиеся точками) и если по ошибке после точки не был введён пробел, сдвинуть всё содержимое и поставить после точки этот пробел. Делаю, как показано ниже на коде и ничего не работает. Если ввожу текст на русском языке, он вообще ничего не выводит (должен вывести изменённый текст), а если на английском, тогда кучу символов беспорядочных, как мне это исправить?
Код

char text[100];//объявлен символьный массив для хранения текста

fgets(text,100,stdin);//ввод строки позволяет указать размер буфера
int length=strlen(text);//определить длину строки (все введёные символы + \0)

for(int i=0;i<length;i++){//цикл от 0 до length - длина строки

         if(text[i]='.' && text[i+1]!=' '){//если символ "." и следующий не пробел

                  text[i+1]=' ';
         }
}

printf("%s", text);

PM MAIL   Вверх
volatile
Дата 10.4.2011, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(goodwen053 @  10.4.2011,  18:57 Найти цитируемый пост)
 if(text[i]='.' 

это присвоение, а не проверка.
нужно if(text[i]=='.' 

дальше,
Цитата(goodwen053 @  10.4.2011,  18:57 Найти цитируемый пост)
   text[i+1]=' ';

здесь вы затираете символ стоящий после точки, а не вставляете.

для того чтобы вставить, я бы посоветовал сделать две строки.
и копировать из одной в другую, по символьно, проверяя условие 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.