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

Массив - C++

Восстановить пароль Регистрация
 
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 14:48     Массив #1
Помогите разобраться. Только начал читать про указатели и решил написать простенькую программку Она считает кол-во прописных букв и записывает эти буквы в массив. Насчет счетчика всё ясно, но вот как записывать буквы в массив не разобрался.

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++ Как массив разнозначных чисел превратить в массив цифр? (С++)
Дан массив A(23). Переписать в новый массив все элементы, расположенные после последнего отрицательного. C++
C++ [C++] необходимо вывести на экран первоночальный массив и полученый массив
Упорядочить массив по невозрастанию элементов. вывести получившийся массив C++
C++ Массив: Получить новый массив В по следующему правилу: В1=А1+А10
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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
 Аватар для 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
 Аватар для diagon
1920 / 1186 / 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
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
12.06.2011, 16:17  [ТС]     Массив #5
Работает ) Только не так, как хотелось бы
последний символ какой то странный) это не '\0' ? Хотя его по идеи while блокирует и нет отступов
как я понял надо " " в while засунуть?

Не по теме:

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

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

Не по теме:

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

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

Не по теме:

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

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

C++ Массив: Заполнить массив из 10 элементов случайным образом в интервале (0..3).
Массив: Получить массив, который содержит все элементы исходного массива, кратные трем C++
C++ Переписать все элементы из этих массивов в массив С так, чтобы массив С был упорядоченным

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

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

Текущее время: 08:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru