Перейти к содержимому

Как узнать длину char c

  • автор:

Как узнать длину массива char с пробелами [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 7 лет назад .

Как узнать длину массива?

sizeof(ch) 

не подходит потому что, когда он идет пробел, то на этом все заканчивается

Как узнать длину char c

как мне кажется, name — массив из 10 элементов.
sizeof должен вернуть размер массива (почти длину строки).
но возвращает или 4 — место занимаемое указателем (как мне кажется)
или размер одного чара, что лежит непосредственно по name.

Re: забыл задать вопрос.

От: Аноним
Дата: 07.05.05 11:30
Оценка:

char *name=»123456789″;
как получить длину строки, лежащей по name?
Re[2]: забыл задать вопрос.

От: loki1000
Дата: 07.05.05 11:33
Оценка:

Здравствуйте, Аноним, Вы писали:

А>char *name=»123456789″;
А>как получить длину строки, лежащей по name?

Re: sizeof и длина строки

От: korzhik
Дата: 07.05.05 11:35
Оценка: 4 (1)

Здравствуйте, Аноним, Вы писали:

А>

А> char *name="123456789"; А> int len1=sizeof(name); // len1 = 4; А> int len2=sizeof(*name); // len2 = 1; А> int len3=sizeof name; // len3 = 4; А>

А>как мне кажется, name — массив из 10 элементов.
неправильно. name это указатель.

Немножко теории:
«123456789» — строковый литерал,
имеет тип — массив десяти константных чаров,
и static storage duration, что, попросту говоря, обозначает что этот литерал доступен в течении всей продолжительности выполнения программы.
Этот литерал где то хранится, но где стандартом не оговаривается, но нам это знать и не надо.
Теперь если ты пишешь:

 char* name = "123456789";

то указатель name будет просто указывать на строковый литерал, а если ты напишешь следуюшим образом:

 char name[] = "123456789";

то name будет массивом из 10-ти символов, в который скопируется строковый литерал.

А>sizeof должен вернуть размер массива (почти длину строки).
sizeof возвращает количество байт занимаемое его операндом, то есть в твоём случае он вернёт размер указателя на твоей платформе.

А>но возвращает или 4 — место занимаемое указателем (как мне кажется)
да, это размер указателя

#include int main() < char* p = "123456789"; char name[] = "123456789"; std::cout sizeof(p) "\n"; std::cout sizeof(name) "\n"; >
4 10

Re[3]: забыл задать вопрос.

От: Аноним
Дата: 07.05.05 11:37
Оценка:

Спасибо, loki1000!

L>ЗЫ: RTFM
Просто поняв, что строки в C++, это не строки в php. что substr() так просто не работает, то и strlen() наверно нет.
Еще раз спасибо, буду читать.

Язык C++

Для работы со строкам в C++ используется тип string . В разделе про потоки мы уже создавали объекты типа string и использовали их с операторами > . Рассмотрим этот тип подробнее.

Примеры создания объектов string :

string a; // пустая строка string b("abc"); // строка проинициализирована списком символов string c1(b); // c1 является копией b string c2 = b; // c2 является копией b string d('d', 10); // d = "dddddddddd" 

Строки хранят в памяти последовательность объектов char , поэтому во многих случаях со строками можно работать как с массивом. Например, обращаться к символам через индекс.

string a("abz"); char c = a[2]; // 'z' char b = a.at(1); // 'b' a[2] = 'c'; // a = "abc" 

Механизмы обращения к элементу через оператор [] и с помощью метода at() отличаются. В первом случае не происходит проверки того, что индекс меньше, чем длина строки. Если это условие не выполняется, то мы приходим к ситуации неопределенного поведения. Метод at() выполняет эту проверку и генерирует исключение в случае некорректного индекса. За это более безопасное поведение мы платим процессорным временем для дополнительной проверки.

По символам строки можно пройти в цикле:

string s("abcde"); for (char ch : s)  cout  <ch  <' '; > 

Узнать длину строки можно с помощью метода size() .

Строки можно конкатенировать с помощью оператора + или метода append :

string a("Hello, "); string b("world!"); string c = a + b; // "Hello, world!" a.append(b); // a = "Hello, world!" a += b; // a = "Hello, world!world!" 

Добавить символ в конец строки можно с помощью метода push_back() , а удалить последний символ — с помощью метода pop_back() .

В типе string реализованы некоторые алгоритмы. Например, можно осуществлять поиск по строке:

string line("There are two needles in this haystack with needles."); string query("needle"); size_t found = line.find(query); // found = 14 if (found != string::npos)  cout  <"first '"  <query  <"' found at: "  <found  <'\n'; > 

Метод find() возвращает позицию первого символа, которому соответствует совпадение. Если совпадений не найдено, возвращается специальная константа. size_t — это беззнаковый целочисленный тип.

Больше возможностей типа string можно найти в документации.

Документация

  • en.cppreference.com/w/cpp/string/basic_string
  • en.cppreference.com/w/cpp/header/cctype
  • Введение
  • Настройка рабочей среды
  • Язык C++
    • Работа с потоками ввода-вывода
    • Строки
    • Контейнеры стандартной библиотеки C++
    • Эффективная передача параметров в функцию
    • Алгоритмы стандартной библиотеки C++
    • Итераторы
    • Библиотеки numeric и random
    • Классы
    • Наследование
    • Динамическое выделение памяти
    • Обобщенное программирование

    Определение длины строки на C++

    02.03.2021 Программирование Комментарии: 0 Давыдов В. Г.

    В этом примере вы научитесь вычислять длину (размер) строки на C++(как строковых объектов, так и строк в стиле C).

    Функции size() и length() – просто синонимы, и обе они делают одно и то же.

    #include using namespace std; int main() < string str = "C++ Programming"; // you can also use str.length() cout String Length = 15

    Пример: длина строки C-стиля

    #include #include using namespace std; int main() < char str[] = "C++ Programming is awesome"; // you can also use str.length() cout String Length = 26
    • �� Преобразование восьмеричного числа в десятичное и наоборот в C++
    • �� Преобразование двоичного числа в восьмеричное и наоборот в C++
    • �� Как перевернуть строку в C++

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *