Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Jincer
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
1

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

04.02.2011, 11:40. Просмотров 1133. Ответов 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;
}
Так же прошу прощения если где то это было, но я перерыл все что можно, не нашел...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 11:40
Ответы с готовыми решениями:

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

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

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

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

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

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

Так как ты используешь потоки языка C++ (т.е., фактически, пишешь на C++), я бы порекомендовал тебе именно второй вариант.
1
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() , я не совсем понял.
0
Nameless One
Эксперт С++
5793 / 3442 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
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;
}
0
Jincer
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 15:35  [ТС] 5
Благодарю!
0
04.02.2011, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2011, 15:35

Динамическое выделение памяти под строки в стиле Си
В программе пользователь вводит строку неизвестного заранее размера. Ее нужно передать в функцию...

Выделение нужного количества памяти для строки
Задача состоит в том, чтобы считать кол-во символов в файле, выделить ровно под эту строку память,...

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


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

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

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