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

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

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

Массив - C++

12.06.2011, 14:48. Просмотров 616. Ответов 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() он не хочет работать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2011, 14:48     Массив
Посмотрите здесь:

Дан массив размерности n. Заполнить массив случайными числами в диапазоне [-100;100]. Перевернуть массив: - C (СИ)
Дан массив размерности n. Заполнить массив случайными числами в диапазоне . Перевернуть массив: a↔a, a↔a и т.д. Для работы с массивом...

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j&gt;3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 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 код набираете? о_О
R136a1
142 / 111 / 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 А что?

diagon
Higher
1928 / 1194 / 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 например =)

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

Не по теме:

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

Изображения
 
diagon
Higher
1928 / 1194 / 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 кнопки нажать быстрее, чем вбивать в консоль =)

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

Не по теме:

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

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

Не по теме:

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

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

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

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

Двумерный массив.Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и записать их в отдельный массив. - Turbo Pascal
помогите составить программу. во задание:Дан массив 5 х 5. Определить сумму элементов тех строк, где диагональный элемент равен нулю и...


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

Или воспользуйтесь поиском по форуму:
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 18:17  [ТС]     Массив #13
Цитата Сообщение от grizlik78 Посмотреть сообщение
Программа работает в соответствии с ожиданиями. Просто сами ожидания неправильные
hjsak — это строчные буквы.
Прописные — HJSAK
Вы правы) вот я нубас(
Миниатюры
Массив  
Yandex
Объявления
12.06.2011, 18:17     Массив
Ответ Создать тему
Опции темы

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