Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231

Чему равна длина Char*

26.05.2015, 02:30. Показов 8980. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вот код:
C++
1
2
3
4
5
for (int i = 0; i < 20; i++)
{
    char c = i + '0';
    Init(&c);//Init(char*);
}
У меня проблема возникает в том, что в функции я проверяю длину char и оказывается, что длина равняется сперва 9 потом 10, а должно равняться 1. Подскажите, как исправить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2015, 02:30
Ответы с готовыми решениями:

Чему равна сумма значений переменных
Чему равна сумма значений переменных a, b, c после выполнения фрагмента программы bool f1, f2; int a, b, c, d; f1 = true; f2 =...

Чему равна сумма цифр числа n.
Чему равна сумма цифр числа n. Параметр n задать при опросе. помогите пожалуйста...

Чему равна сумма 10^10 членов гармонического ряда?
С точностью 12 знаков после запятой. Сколько времени считается, на каком оборудовании?

37
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
26.05.2015, 18:23  [ТС]
Студворк — интернет-сервис помощи студентам
daslex
Проблема в том, что когда i будет равняться 10:
C++
1
cout<<c<<"  "<<strlen(c)<<"\n";
здесь будет выводиться 1, а должно 2 и с должно равняться 10, а не символу ':'
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.05.2015, 18:27
Helldrg, если стрингами тебе пользоваться нельзя, то можешь использовать itoa (но она не стандартная), или sprintf.
Пример можешь найти тут: http://www.cplusplus.com/reference/cstdlib/itoa/
0
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
26.05.2015, 18:39  [ТС]
Tulosba
На itoa у меня студия ругается
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.05.2015, 19:03
Цитата Сообщение от Helldrg Посмотреть сообщение
На itoa у меня студия ругается
Цитата Сообщение от Tulosba Посмотреть сообщение
или sprintf.
C++
1
2
char c[21];
sprintf(c, "%d", i);
0
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
26.05.2015, 19:04  [ТС]
sprintf на это тоже ругается
0
Модератор
Эксперт С++
 Аватар для zss
13795 / 10987 / 6492
Регистрация: 18.12.2011
Сообщений: 29,287
26.05.2015, 19:06
Лучший ответ Сообщение было отмечено Helldrg как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <strstream>
using namespace std;
 
void Init(const char *c)
{
    cout<<c<<"  "<<strlen(c)<<"\n";
}
 
int main()
{
    char c[3];
    for (int i = 0; i < 20; i++)
    {
        ostrstream os(c,3);
        os<<i<<'\0';
        Init(c);
    }
    system("pause");
    return 0;
}
2
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
26.05.2015, 19:16  [ТС]
zss
Спасибо большое!!!
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.05.2015, 19:38
Цитата Сообщение от Helldrg Посмотреть сообщение
Спасибо большое!!!
Странно конечно, когда стринги нельзя, а потоки стрингов можно.
Цитата Сообщение от zss Посмотреть сообщение
C++
1
ostrstream os(c,3);
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
26.05.2015, 19:53
Короче если будет нельзя потоки, то может и не зря делал
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
31
32
33
34
35
#include <iostream>
#include <string.h>
using namespace std;
 
void Init(const char *c){
   cout<<c<<"  "<<strlen(c)<<"\n";
}
 
int main()
{
  char ch[10]="";
 
  int temp;
  int count=0;
 
  for (int i=0;i<101;i++){
        temp=i;
        if (!i) strncpy(ch,"0",2);  //Для нуля нужен костыль
 
        while(temp){
                ch[strlen(ch)]=(temp%10)+'0';
                ch[count+1]=0;
                count++;
                temp/=10;
        }
 
        for (unsigned j=0;j<(strlen(ch))/2;j++) swap(ch[j],ch[strlen(ch)-1-j]); //реверс строки
    Init(ch);  //Массив хранит число как массив символов
    ch[0]=0;
    count=0;
  }
 
 
    return 0;
}
1
Модератор
Эксперт С++
 Аватар для zss
13795 / 10987 / 6492
Регистрация: 18.12.2011
Сообщений: 29,287
26.05.2015, 20:05
Tulosba, ostrstring - это не string поток, а char* поток
2
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
26.05.2015, 21:22  [ТС]
daslex
Да не то что бы нельзя просто не желательно и с ними у меня не работало, сейчас проверю твой код

Добавлено через 3 минуты
У меня нет функции swap и strncpy на эту функцию ругается компилятор
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
27.05.2015, 09:58
Лучший ответ Сообщение было отмечено Helldrg как решение

Решение

с реверсом строки
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
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
using namespace std;
 
void Init(const char *c){
    cout<<c<<"  "<<strlen(c)<<"\n";
}
 
int main()
{
    char ch[10]="";
 
    int temp;
    int count=0;
 
    for (int i=0;i<101;i++){
        temp=i;
        if (!i) {           
            ch[0]='0';
            ch[1]=0;
        }
 
        while(temp){
            ch[strlen(ch)]=(temp%10)+'0';
            ch[count+1]=0;
            count++;
            temp/=10;
        }
 
        for (unsigned j=0;j<(strlen(ch))/2;j++) {
            temp=ch[j];
            ch[j]=ch[strlen(ch)-1-j];
            ch[strlen(ch)-1-j]=temp;        
        }
        Init(ch);  //Массив хранит число как массив символов
        ch[0]=0;
        count=0;
    }
 
    cin.get();
    return 0;
}


без реверса строки, математический вариант

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
31
32
33
#include <iostream>
#include <cmath> //log10
using namespace std;
 
void Init(const char *c){
    cout<<c<<"  "<<strlen(c)<<"\n";
}
 
int main()
{
 
    int temp;
    int count=0;
    char ch[10];
 
    for (int i=0;i<101;i++){
        if (!i) { ch[0]='0'; ch[1]=0; }
        else {
            temp=log10(double(i))+1;
            while(temp--){
                ch[count]=int(i/pow(10,(float)temp)) % 10 + '0';
                ch[count+1]=0;
                count++;
 
            }
        } //if (!i)
        Init(ch);
        count=0;
    }
 
    //cin.get();
    return 0;
}


С отрицательными числами

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
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <cmath>//lo
using namespace std;
 
void Init(const char *c){
    cout<<c<<"  "<<strlen(c)<<"\n";
}
 
int main()
{
 
    int temp;
    int t2;
    int count=0;
    char ch[10];
 
    for (int i=-100;i<101;i++){
        if (!i) { ch[0]='0'; ch[1]=0; }
        else {
            if (i<0) {
                temp=-i;
                ch[count]='-';
                ch[count+1]=i+'0';
                count++;
            } else temp=i;
            t2=log10(float(temp))+1;
            while(t2--){
                ch[count++]=int(temp/pow(10,(float)t2)) % 10 + '0';
                ch[count]=0;    
 
            }
        } //if (!i)
        Init(ch);
        count=0;
    }
 
    cin.get();
    return 0;
}
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.05.2015, 17:31
Цитата Сообщение от zss Посмотреть сообщение
ostrstring - это не string поток, а char* поток
Угу. Что-то глаз замылился.
Цитата Сообщение от Helldrg Посмотреть сообщение
У меня нет функции swap и strncpy на эту функцию ругается компилятор
Что за комплятор-то? Студия древняя?

Цитата Сообщение от zss Посмотреть сообщение
ostrstring - это не string поток, а char* поток
Хорошая мысля приходит опосля. Класс std::ostrstream признан устаревшим ещё со времен C++98.
0
Модератор
Эксперт С++
 Аватар для zss
13795 / 10987 / 6492
Регистрация: 18.12.2011
Сообщений: 29,287
27.05.2015, 18:42
Может и устаревший, но мне нравится
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.05.2015, 18:49
Цитата Сообщение от zss Посмотреть сообщение
Может и устаревший, но мне нравится
Это называется анахронизм
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
27.05.2015, 21:25  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Что за комплятор-то? Студия древняя?
Да, древняя - 2013 =(
daslex
в течении вечера проверю код и отпишу, спасибо
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.05.2015, 22:44
Цитата Сообщение от Helldrg Посмотреть сообщение
Да, древняя - 2013 =(
Жуть какая древность, действительно. Надо переходить на 2133.
А если серьёзно, то и swap, и strncpy всё там есть. Но в некоторых случаях студии надо просто немного помочь понять, что от нее требуется.
0
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
04.06.2015, 03:21  [ТС]
daslex
Так получилось, что я снова столкнулся с этой проблемой и ваш код "без реверса строки, математический вариант" отлично помог мне, спасибо большое, за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.06.2015, 03:21

Сколько цифр в числе и чему равна их сумма?
дано натуральное число n(n&lt;=100) a) Сколько цифр в числе n? б) Чему равно сумма его чисел? в) Найти последнюю цифру г) первую...

Чему будет равна переменная после выполнения следующего фрагмента программы?
Пожалуйста, очень прошу помогите с тестами(( 2)Чему равна переменная m при p = 32 и p1 = 9 после выполнения следующего фрагмента...

Почему длина данной строки равна 11?
#include&lt;stdio.h&gt; #include&lt;string.h&gt; int main(){ char *str=&quot;ax\x12+b\029\\a\&quot;!&quot;; printf(&quot;a=%d\n&quot;,strlen(str)); return 0; ...

Чему равна минимальная сумма первых членов последовательности, превышающая некоторое заданное число R
Помогите решить! Дана последовательность 1/2, 1/3, 1/4, … . Чему равна минимальная сумма первых членов последовательности, превышающая...

Выбрать те слова, длина которых равна заданному числу
Выбрать те слова, длина которых равна заданному числу.


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru