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

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

Войти
Регистрация
Восстановить пароль
 
Jincer
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
#1

Строки и символы, выделение памяти - C++

04.02.2011, 11:40. Просмотров 1001. Ответов 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
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
 
 main()
{
 
 
    int k;
    int z;
    cout <<"Vvedite simvoli,posle  chego najmite  ' ' + enter"<<endl;
    string a;
    getline (cin,a);
    cout <<"Vvedite shirinu stroki"<<endl;
    cin >>k;
    for (int i=0; a[i]!=' '; i++)
    {
        cout <<a[i];
    if (i>0 && fmod((i+1),k)==0)
       cout <<endl;
    }
    cout <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Код подправленной но неработающей программы
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 <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
 
 main()
{
 
 
    int k;
    int z;
    cout <<"Vvedite simvoli,posle  chego najmite  ' ' + enter"<<endl;
    char a;
    cin.getline (a,z);
    cout <<"Vvedite shirinu stroki"<<endl;
    cin >>k;
    for (int i=0; i<z+1; i++)
    { 
        cout <<a[i];
    if (i>0 && fmod((i+1),k)==0)
       cout <<endl;
    }
    cout <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Так же прошу прощения если где то это было, но я перерыл все что можно, не нашел...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 11:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки и символы, выделение памяти (C++):

Выделение памяти для строки - C++
Почему размер строки первой 4 байта а второй 50 байт?Первая должна сколько же. #include &lt;stdio.h&gt; #include &lt;Windows.h&gt; #include...

Динамическое выделение памяти под строки - C++
Доброго времени суток. Изучаю основы C++, дошел до раздела &quot;указатели и динамическое выделение памяти&quot;. Имеется код, в котором...

Динамическое выделение памяти для строки - C++
Подскажите, пожалуйста , почему в данной программе появляются ошибки в строке return Vector(v1.x + v2.x, v1.y + v2.y, v1.cp +...

Выделение памяти для строки символов - C++
Нужно выделить память под массив указателей на строки, ввести текст построчно динамически выделяя память для каждой строки и записывая...

Указатели на строки. Выделение и освобождение памяти - C++
Всем добрый день. Есть два указателя на char. Для первого выделяется память а у второго просто делаем копию с первого. Для 1-го...

Динамическое выделение памяти под строки в стиле Си - C++
В программе пользователь вводит строку неизвестного заранее размера. Ее нужно передать в функцию для работы с ней. Как это оформить на c++?...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
04.02.2011, 12:02 #2
char - это один символ, так что getline для него использовать не надо. char a[] - это строка C. std::string - это строка C++ (определенная в заголовочном файле string). Чтобы получить размер введенной строки, нужно в первом случае воспользоваться фукнкцией strlen, определенной в заголовочном файле string.h (или cstring, если используется компилятор C++), во втором - методом size().

Так как ты используешь потоки языка C++ (т.е., фактически, пишешь на C++), я бы порекомендовал тебе именно второй вариант.
Jincer
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 12:46  [ТС] #3
Nameless One, Большое спасибо ! Вот окончательный текст программы :
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
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <cstring>
using namespace std;
 
 main()
{
 
 
    int k;
    int z;
    cout <<"Vvedite simvoli,posle  chego najmite  ' ' + enter"<<endl;
    char *a;
    gets (a);
    z = strlen(a);
    cout <<"Vvedite shirinu stroki"<<endl;
    cin >>k;
    for (int i=0; i<=z; i++)
    {
        cout <<a[i];
    if (i>0 && fmod((i+1),k)==0)
       cout <<endl;
    }
    
    cout <<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
И если не сложно, напиши пожалуйста как ты хотел с помощью size() , я не совсем понял.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
04.02.2011, 14:56 #4
Цитата Сообщение от Jincer Посмотреть сообщение
Nameless One, Большое спасибо ! Вот окончательный текст программы:
C
1
2
3
4
//...
char *a;
gets (a);
//...
Так делать - плохо! Под строку (т.е. массив символов) нужно выделять память статически или динамически. Статическое выделение памяти может выглядеть так (вместо небезопасной функции gets будем использовать более безопасную fgets; нужно помнить что fgets, в отличие от gets, сохраняет введенный символ перевода строки):
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE 80         /* Максимальный размер строки */
 
int main()
{
    char buf[SIZE];
    fgets(buf, SIZE, stdin);
 
    /* Если нужно, чтобы строка не содержала
     * символ '\n' (перевод строки), то
     * нужно раскомментировать следующие две строки
     */
    /* if(buf[strlen(buf) - 1] == '\n');
     *  buf[strlen(buf) - 1] = '\0';
     */
 
    /* Работаем со строкой */
    //...
    printf("Size is %u\n", strlen(buf));
 
    exit(0);
}
Цитата Сообщение от Jincer Посмотреть сообщение
И если не сложно, напиши пожалуйста как ты хотел с помощью size() , я не совсем понял.
Пример использования метода size() для получения длины строки типа std::string:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main()
{
    std::string line;
    
    std::cout << "Input a line" << std::endl;
    std::getline(std::cin, line);
    std::cout << "Its length is " << line.size()
          << std::endl;
    
    return 0;
}
Jincer
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 15:35  [ТС] #5
Благодарю!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 15:35
Привет! Вот еще темы с ответами:

Выделение и удаление памяти, выделенной для динамической строки - C++
Данная функция производит ввод и собственно контроль ввода (размер массива от 1 до 20, иначе должна выдавать ошибку; при вводе букв также...

Указатели, функции и динамическое выделение памяти: вывести строки с неповторяющимися данными - C++
Задана матрица A(n,n) ,n&lt;=15 . Написать программу, которая находит и выводит на экран номера тех строк, элементы которых не...

Выделение памяти в куче для строки для реализации длинной арифметики - C++
Доброго времени суток, пишу класс string, на основе которого потом хочу реализовать класс для длинной арифметики. Поэтому мне понадобился...

Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и нечетные символы строки S2. - C++
Вот задание: Даны строки S1 и S2. Сформировать строку S таким образом, чтобы в нее попеременно вошли четные символы строки S1 и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2011, 15:35
Ответ Создать тему
Опции темы

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