Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
#1

Массив - C++

12.06.2011, 14:48. Просмотров 629. Ответов 12
Метки нет (Все метки)

Помогите разобраться. Только начал читать про указатели и решил написать простенькую программку Она считает кол-во прописных букв и записывает эти буквы в массив. Насчет счетчика всё ясно, но вот как записывать буквы в массив не разобрался.

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
GNU nano 2.2.6                     Файл: p209E12.cpp
 
 
#include <cctype>
#include <iostream>
using namespace std;
 
main() {
char str[80];
char *u;
char *b[10], i;
int chet = 0;
 
cout << "Введите строку: ";
cin >> str;
 
u = str;
 
while(*u) {
 if(islower(*u)) {
    chet++;
      for(i = 0; i < 4; i++)
        b[i] = u;
                      }
 
u++;      }
 
cout << "кол-во прописных букв = " << chet << "\n";
cout << *b[i] << '  ';
return 0; }
и ещё вопрос: как считывать строку с пробелами, компилю на g++ , с gets() он не хочет работать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2011, 14:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив (C++):

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив... - C++
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько...

Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив. - C++
Есть текстовый файл, в нем 3 столбца чисел (число строк заранее неизвестно). Напишите пожалуйста код, чтобы первый столбец записывался в...

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

с клавиатуры ввести массив,во второй массив записать нечетные элементы из первого - C++
с клавиатуры ввести массив,во второй записать нечетные элеиенты из первого.В третий массив записать четные элементы, стоящие на нечетных...

12
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.06.2011, 14:54 #2
Объявляете переменную, равную нулю, и затем просто увеличиваете ее при записи.
Т.е. запись будет проходить примерно так
C++
1
2
3
4
5
char str[size];
int j=0;
for (int i = 'a'; i < 'z'; i++)
     str[j++] = i;
str[j] = 0; //ставим символ конца строки
gets в g++ работает, только выдает warning, что это функция небезопасна.
Только это сишная функция, в с++ есть std::cin.getline(строка, количество символов)
Или std::getline для STL строк
P.S. Вы в nano код набираете? о_О
1
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 15:48  [ТС] #3
diagon, спасибо) вроде понял, но не до конца

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
#include <cctype>
#include <iostream>
using namespace std;
 
main() {
char str[80], b[80];
char *u;
int j = 0;
int chet = 0;
 
cout << "Введите строку: ";
cin >> str;
 
u = str;
 
while(*u) {
  if(islower(*u)) {
        chet++;
          for(int i = 'a'; i < 'z'; i++) {
            b[j++] = i;
            b[j] = 0;          } }
u++;    }
 
cout << "\nпрописных букв = " << chet << "\n";
cout << b << ' ';
return 0; }
если букву находит, то потом весь алфавит выводит. Не пойму какое условие добавить после for

Не по теме:

Да, в nano А что?

0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.06.2011, 15:53 #4
Я это просто для примера привел, записывающего в строку английский алфавит =)
В вашем случае будет примерно так
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
#include <cctype>
#include <iostream>
using namespace std;
 
main() {
char str[80], b[80];
char *u;
int j = 0;
int chet = 0;
 
cout << "Введите строку: ";
cin.getline(str,80);
 
u = str;
 
while(*u) {
  if(islower(*u)) {
        chet++;
        b[j++]=*u;
        }
  u++;
}
b[j] = 0;
 
cout << "\nпрописных букв = " << chet << "\n";
cout << b << ' ';
return 0; }

Не по теме:

В nano писать это мазохизм ведь, в gedit и то поудобнее будет... Скачайте себе IDE, geany например =)

1
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 16:17  [ТС] #5
Работает ) Только не так, как хотелось бы
последний символ какой то странный) это не '\0' ? Хотя его по идеи while блокирует и нет отступов
как я понял надо " " в while засунуть?

Не по теме:

смысл писать мелкие программки в ide?) Удобно ведь, когда сразу в терминале и пишешь и компилишь) к тому же в nano есть подсветка синтаксиса из ide есть codeblocks

0
Изображения
 
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.06.2011, 16:23 #6
Цитата Сообщение от R136a1 Посмотреть сообщение
Работает ) Только не так, как хотелось бы
последний символ какой то странный) это не '\0' ? Хотя его по идеи while блокирует и нет отступов
как я понял надо " " в while засунуть?

Не по теме:

смысл писать мелкие программки в ide?) Удобно ведь, когда сразу в терминале и пишешь и компилишь) к тому же в nano есть подсветка синтаксиса из ide есть codeblocks

Да, это \0, который означает символ конца строки. std::cout << Выводит все до этого самого нуля, и если его убрать, то будет брать значения из левых участков памяти, пока среди них не попадется терминальный нуль(как у вас на скрине, например)
while его не блокирует, он после цикла стоит, и всегда выполняется.

Не по теме:

В IDE также есть подсветка синтаксиса, только там удобнее работать, есть например поддержка отступов, без которых тяжело читать код. Да и компилировать удобнее - 2 кнопки нажать быстрее, чем вбивать в консоль =)

0
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 16:54  [ТС] #7
Цитата Сообщение от diagon Посмотреть сообщение
и если его убрать, то будет брать значения из левых участков памяти, пока среди них не попадется терминальный нуль(как у вас на скрине, например)
т.е нельзя сделать так, чтобы его не показывало?)

Не по теме:

Ну кому что удобнее)

0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.06.2011, 16:56 #8
Цитата Сообщение от R136a1 Посмотреть сообщение
т.е нельзя сделать так, чтобы его не показывало?)

Не по теме:

Ну кому что удобнее)

Кого его?
Нуль и так не отображается на экране, а мусор после строки - следствие того, что вы убрали 23 строку.
1
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 17:07  [ТС] #9
diagon, спасибо) разобрался.
0
Изображения
 
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
12.06.2011, 17:27 #10
Возможно я сейчас разрушу чей-то мир, но islower выдаёт не 0 для строчных букв. Для прописных (они же заглавные) нужна функция isupper
0
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 17:47  [ТС] #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
Возможно я сейчас разрушу чей-то мир, но islower выдаёт не 0 для строчных букв. Для прописных (они же заглавные) нужна функция isupper
Программа же корректно работает) Если встречается прописная буква то if получается больше нуля (что и нужно) и выполняются инструкции - счетчик и запись в массив. Или я что то не понимаю?)
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
12.06.2011, 17:50 #12
Программа работает в соответствии с ожиданиями. Просто сами ожидания неправильные
hjsak — это строчные буквы.
Прописные — HJSAK
1
R136a1
143 / 112 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 18:17  [ТС] #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Программа работает в соответствии с ожиданиями. Просто сами ожидания неправильные
hjsak — это строчные буквы.
Прописные — HJSAK
Вы правы) вот я нубас(
0
Миниатюры
Массив  
12.06.2011, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 18:17
Привет! Вот еще темы с ответами:

Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q. - C++
Дан массив K(N).Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q.

Массив: Все элементы массива, кратные трем, записать в одномерный массив. - C++
Дан двумерный массив размером n x n? заполненный целыми числами. Все его элементы кратные трем, записать в одномерный массив.

Массив: Переместить в массив Y все числа, дробная часть которых больше 5. - C++
Помогите решить, вообще не понимаю как в С++ с дробной частью работать. Задан массив X(N) дробных чисел. Переместить в массив Y все...

Массив: сформировать массив C[12] так, чтобы элементы располагались следующим образом: A(1) B(1) A(2) B(2) - C++
из массивов A и B сформировать массив C так, чтобы элементы массива располагались следующим образом: A(1) B(1) A(2) B(2) и т.д.


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

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

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