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

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

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

Массив - C++

12.06.2011, 14:48. Просмотров 614. Ответов 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     Массив
Посмотрите здесь:

Нужно записать массив в файл, а потом из этого файла считать этот же массив C++
Массив: Составить массив из двух исходных по заданному принципу заполнения C++
Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству C++
Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
C++ Найти ошибку. Записать 20 целых чисел в массив. Переписать отрицательные в массив А, а положительные в Б
Файлы и массив (сделать так, чтобы массив заполнялся значениями из этого же файла) C++
C++ Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1924 / 1190 / 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
1924 / 1190 / 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
1924 / 1190 / 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
1924 / 1190 / 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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
12.06.2011, 17:50     Массив #12
Программа работает в соответствии с ожиданиями. Просто сами ожидания неправильные
hjsak — это строчные буквы.
Прописные — HJSAK
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 18:17     Массив
Еще ссылки по теме:

Создать третий массив, в котором собрать элементы массива A, которые не включаются в массив B C++
Записать все положительные элементы матрицы в массив arrP, а отрицательные - в массив arrN C++
C++ Дан массив из 25 элементов. Сформировать из него новый массив, элементы которого кратны 5
C++ Описать класс Массив, найти массив, состоящий из элементов первого и второго массива

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

Или воспользуйтесь поиском по форуму:
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