Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
parkito
11 / 11 / 9
Регистрация: 22.03.2010
Сообщений: 693
1

Из символов в буквы

19.07.2011, 11:23. Просмотров 883. Ответов 16
Метки нет (Все метки)

Знаю один из методов защиты от переполнения массива.

C++
1
2
3
4
5
char str[40];
cout<<"Введите строчку символов --> ";
cin>>setw(40)>>str;
 
}
Мне надо проделать такую же защиту с типом данных
C++
1
int
Примерно должно выглядеть так

C++
1
2
3
int str[40];
cout<<"Введите цифры --> ";
cin>>setw(40)>>str;
Как этого добится ?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 11:23
Ответы с готовыми решениями:

C (СИ) - Ввести строку символов.И После каждой 2 Буквы ( Именно буквы ) Вставить слово
Огромное Спасибо Darkrduk за эту программу ( программа вставляет MAU ) после...

Слова, буквы. Вывести последовательность символов.
Помогите разобраться с задачей на Си, со строками проблемы. Дана не пустая...

Определить класс символов (цифры или буквы)
Дано арифметическое выражение. Написать программу, определяющую к какому...

Непонятные буквы вместо русских символов в консоли
#include&quot;stdafx.h&quot; #include&quot;windows.h&quot; #include&lt;iostream&gt; #include&lt;stdlib.h&gt;...

Коды символов одной и той же буквы различаются. [help]
тоесть если я делаю cout&lt;&lt;int('а'); где а-русская, он выводит код -32. И так...

16
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
19.07.2011, 11:24 2
Циклом for?
0
parkito
11 / 11 / 9
Регистрация: 22.03.2010
Сообщений: 693
19.07.2011, 11:25  [ТС] 3
Цитата Сообщение от neske Посмотреть сообщение
Циклом for?
нужно сделать так чтоб пользователь только один раз нажимал интер
0
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
19.07.2011, 11:33 4
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
cout << " НЕ ЖМИ ENTER, ПАДЛА !!! << endl;
Добавлено через 45 секунд
или так:
C++
1
cout << "ВВОДИ ДАННЫЕ ЧЕРЕЗ ПРОБЕЛЫ, А НЕ ЧЕРЕЗ ENTER !!!!!!!!!!!" << endl;
4
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
19.07.2011, 11:36 5
ВВОДИ ДАННЫЕ ЧЕРЕЗ ПРОБЕЛЫ, А НЕ ЧЕРЕЗ ENTER - будь плохим парнем.
1
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
19.07.2011, 12:52 6
Цитата Сообщение от parkito Посмотреть сообщение
нужно сделать так чтоб пользователь только один раз нажимал интер
Вводить данные в строку(std::string) и парсить(std::istringstream). Ну, или следовать советам приведённым выше )
0
parkito
11 / 11 / 9
Регистрация: 22.03.2010
Сообщений: 693
19.07.2011, 13:06  [ТС] 7
Ну вот этот массив чтоб заполнить нужны интеры

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<iomanip>
#include <windows.h>
#include <cstring>
using namespace std;
int main ()
{setlocale(LC_ALL,"Rus");
int a[10];
cout<<"Не жми на интер ***ла --> ";
for(int i=0;i<10;i++)
    cin>>a[i];
cout<<'1';
cout<<a;
cin.get();
cin.get();
return 0;
}
0
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
19.07.2011, 13:20 8
Можно ввести и без enter'a.
1
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
19.07.2011, 13:33 9
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
25
26
27
28
29
30
31
32
33
34
#include <sstream>
#include <iostream>
#include <string>
#include <cstddef>
 
void ReadLnToArr(int array[], std::size_t capacity, std::size_t* new_size)
{
    std::string s;
    std::getline(std::cin, s);
    std::istringstream stream(s);
 
    *new_size = 0;
 
    for(std::size_t i = 0; i < capacity; ++i)
    {
        if(stream >> array[i]) ++*new_size;
        else break;
    }
}
 
int main()
{
    const std::size_t a_capacity = 10;
 
    std::size_t a_size = 0;
    int a[a_capacity] = {0};
 
    ReadLnToArr(a, a_capacity, &a_size);
 
    for(std::size_t i = 0; i < a_size; ++i)
        std::cout << a[i] << '\n';
 
    return 0;
}
0
parkito
11 / 11 / 9
Регистрация: 22.03.2010
Сообщений: 693
19.07.2011, 13:47  [ТС] 10
Цитата Сообщение от neske Посмотреть сообщение
Можно ввести и без enter'a.
А без пробелов можно ? Нужно просто чтоб ввелась строка и каждая ее цифра поместилась в разные части массива
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
19.07.2011, 13:48 11
rangerx, млин вот не знаю почему но мне вот это не нравится
C++
1
2
3
    std::string s;
    std::getline(std::cin, s);
    std::istringstream stream(s);
мне кажется что stream должно инициализироваться пустой строкой (ведь на этапе компиляции же)
хотя код проверил - работает.
вообщем не знаю ... не доверяю как-то.

имхо лучше так делать:
C++
1
2
3
4
    std::string s;
    std::getline(std::cin, s);
    std::istringstream stream;
stream << s;
0
rangerx
1944 / 1553 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
19.07.2011, 14:19 12
Цитата Сообщение от OstapBender Посмотреть сообщение
мне кажется что stream должно инициализироваться пустой строкой
Нет
Цитата Сообщение от OstapBender Посмотреть сообщение
(ведь на этапе компиляции же)
???
Цитата Сообщение от OstapBender Посмотреть сообщение
имхо лучше так делать
Так сделать нельзя, оператор << для входного потока не перегружен
1
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
19.07.2011, 14:25 13
Цитата Сообщение от OstapBender Посмотреть сообщение
мне кажется что stream должно инициализироваться пустой строкой (ведь на этапе компиляции же)
Так а какая разница? Будет создан примерно такой код:
C++
1
istringstream(this, s);//где this=&stream
т.е. вызов конструктора, а там уже что он будет делать со строкой s - это его дело))
0
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
19.07.2011, 14:26 14
Цитата Сообщение от OstapBender Посмотреть сообщение
имхо лучше так делать:
Для этого есть специальный метод str
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
19.07.2011, 14:57 15
Цитата Сообщение от rangerx Посмотреть сообщение
Так сделать нельзя, оператор << для входного потока не перегружен
да, не заметил что там iss а не просто ss.
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
Для этого есть специальный метод str
ето для вывода, а я хотел ввести строку туда

Kastaneda, да, мне почему то взбрело что конструктор вызывается на этапе компиляции, когда строка s еще пустая, типа ошибка наподобие этого:
C++
1
2
3
4
5
6
    int n;
 
    std::cout << "n: ";
    std::cin >> n;
 
    int arr[n];
0
Kastaneda
19.07.2011, 15:03
  #16

Не по теме:

Цитата Сообщение от OstapBender Посмотреть сообщение
Kastaneda, да, мне почему то взбрело что конструктор вызывается на этапе компиляции
Я как-то интуитивно так и подумал :)

0
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
19.07.2011, 15:08 17
Цитата Сообщение от OstapBender Посмотреть сообщение
ето для вывода, а я хотел ввести строку туда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <sstream>
 
int main()
{
    std::string s("my string");
    std::string t;
    std::istringstream isstr;
 
    isstr.str(s);
 
    isstr >> t;
    std::cout << t << std::endl;
    return 0;
}
1
19.07.2011, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 15:08

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

Найти в массиве символов количество слов, начинающихся с буквы b
Дан массив символов, содержащий английский текст. Найти количество слов,...

После каждой 2 Буквы вставлять строку символов MAU
С++ Ввести строку символов.И После каждой 2 Буквы ( Вставлять MAU ) Немного...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru