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

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

Войти
Регистрация
Восстановить пароль
 
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
#1

Длина строки до ввода ? - C++

21.01.2014, 19:53. Просмотров 349. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>//обеспечение доступа к классу string
#include <cstring>
using namespace std;
int main(){
char charr[20];
string str;
cout<<"длина строки в charr до ввода="<<strlen(charr)<<endl;
 
cout<<"длина строки в  str до ввода="<<str.size()<<endl;
 
cin.getline(charr,60);//ввод строки текста
                      //указание максимальной длины.
cout<<charr<<endl;
getline(cin,str);//ввод другой строки текста
//теперь cin -аргумент: спецификатор длины отсутствует.
cout<<str<<endl;
cout<<"длина строки в charr после ввода"<<endl;
cout<<strlen(charr)<<endl;//длина строки в charr после ввода
cout<<"длина строки в str после ввода"<<endl;
cout<<str.size()<<endl;//длина строки в str после ввода.
    return 0;
}
почему длина строки до ввода текста выводится как 7 , а я задавал размер 20 ?

Добавлено через 10 минут
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длина строки до ввода ? (C++):

появилась загвоздка с функцией. нужно вывести на экран строку, сост. из звездочек. Длина строки-параметр функциииз звезд. длина строки - - C++
Я видела, что на форуме есть подобные задачи, но ни одно из их решений не работает на моем dev cpp.:( вот вариант решения, но он не...

Если длина введенной строки кратна 4, первую часть строки поменять местами со второй - C++
Если длина введенной строки кратна 4, первую часть строки поменять местами со второй.

Удалить из строки среднюю букву, если длина строки нечётная или две средних в противном случае - C++
Строки. Дана строка S. Удалите из неё среднюю букву, если длина строки нечётная или две средних в противном случае. Формат входных...

длина строки - C++
Здравствуйте. Есть такой код. char stroka; char *str=new char ; cout&lt;&lt;str&lt;&lt;&quot; - &quot;&lt;&lt;strlen(str)&lt;&lt;endl&lt;&lt;stroka&lt;&lt;&quot; - ...

Длина строки - C++
У меня задача стоит что бы пользователь ввёл какой-то текст, а потом программа вычислала длину этой стороки. #include &lt;iostream.h&gt; ...

Длина строки в С++ - C++
Здравствуйте, кто может, подскажите, как определить длину строки в С++. Знаю, что в паскале было бы так: c:=lenght(s); А как на С++ не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
21.01.2014, 20:00 #2
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>//обеспечение доступа к классу string
using namespace std;
int main(){
    string stroka;
    int n;
    n=stroka.length(); //длина строки
    return 0;
}

Добавлено через 33 секунды
Цитата Сообщение от sergei60 Посмотреть сообщение
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
потому, что считает до пробела
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.01.2014, 20:01 #3
Цитата Сообщение от sergei60 Посмотреть сообщение
почему длина строки до ввода текста выводится как 7 , а я задавал размер 20 ?
20 - это не размер твоей строки, это даже не объявление строки, а просто размер буфера выделенный на стеке. Будет это строка, или набор символов, или любые рандомные данные - программе пофиг.
С-строка оканчивается нулевым символом. На стеке может быть какой угодно мусор. Поэтому длина твоей "строки" может быть любой. Потому что это не строка, а мусор из байтов на стеке. Где там попадется \0, кто его знает.
Цитата Сообщение от sergei60 Посмотреть сообщение
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
Потому что строка должна оканчиваться нулевым символом.

Добавлено через 34 секунды
Цитата Сообщение от ruTwit Посмотреть сообщение
потому, что считает до пробела
Нет, не до пробела.
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 20:39 #4
Цитата Сообщение от sergei60 Посмотреть сообщение
cin.getline(charr,60);//ввод строки текста
* * * * * * * * * * * //указание максимальной длины.
Для getline() второй параметр не должен быть больше размера буфера (иначе, выход за границу массива).
C++
1
2
3
char charr[20];
...
cin.getline(charr, 20);
Функция считает не больше чем 20 - 1 символов, поместив в конце '\0'.
1
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
21.01.2014, 20:50  [ТС] #5
alsav22 , ценное замечание ,как мои мысли подсмотрел,а я сижу гадаю над сообщением компилятора. *** stack smashing detected ***: ./m terminated
Segmentation fault Оказывается тут собака зарыта.! Но ведь объект strig автоматически изменяет свой размер чтобы вместить строку. я же здесь string str; не определяю размер.В этом я думал преимущество класса string .что он сам увеличивает размер как угодно..
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 21:17 #6
Цитата Сообщение от sergei60 Посмотреть сообщение
Но ведь объект strig автоматически изменяет свой размер чтобы вместить строку. я же здесь string str; не определяю размер.В этом я думал преимущество класса string .что он сам увеличивает размер как угодно..
Я же не про string пшу. В string читает другая функция: std::getline(). Там всё нормально. А в массив char читает метод getline(), класса istream (вызывается через объект cin):
C++
1
cin.getline(charr, 20);
0
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
21.01.2014, 21:24  [ТС] #7
alsav22, спасибо ,полностью разобрался.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 21:24
Привет! Вот еще темы с ответами:

Длина C-строки - C++
Столкнулся с такой проблемой: при передаче функции char-массива и нахождения его размера в этой функции результат получается равным 4... ...

Длина строки в С++ - C++
Проблема с программой,дальше мыслей нету никаких. Нужно чтобы программа определяла длину строки(вводишь строку,а программа показывает...

длина строки - C++
Определить длинну строки, которая введена пользователем.

файл и длина строки - C++
Предположим, я создал файл в блокноте. Назвал его &quot;A.txt&quot;. В этом файле написал какое-то слово. Сохранил. Как мне подсчитать длину этого...


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

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

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