Deepak Kumar Choudhary Ответов: 3

Как найти длину вопроса в C++?


Предположим, 343-это число, и мы должны найти его длину, что мы делаем, как мы печатаем в программе c++, что это 3?
<pre>// Main function of the C++ program.

#include <iostream>
using namespace std;

int main()
{
 cout<<"Enter number to get the length of the number.";
 cin>>x;
 int xlen=0;
 for(int i!=0; i=x/10; xlen++)
  { cout<<"The length is:"<xlen;
    int l=xlen;
    cout<<l;
}
return 0;
}


Что я уже пробовал:

Пожалуйста, скажите мне, в чем заключается ошибка и решение. Поскольку я новичок, пожалуйста, помогите мне с кодом. Спасибо.

3 Ответов

Рейтинг:
22

OriginalGriff

Не гадайте, каким должен быть код, подумайте об этом и разработайте его!
Во-первых, вам нужно прочитать номер.
Затем вам нужно подсчитать количество цифр в этом числе - поэтому вам нужен цикл, и вам нужен счетчик, который увеличивается на единицу каждый раз, когда вы обходите цикл. Затем вам нужно вывести значение счетчика после цикла.
Кое-что из этого у тебя есть, почти. Объявлять x и Первый БИТ сработает:

int x = 0;
cout << "Enter number to get the length of: ";
cin >> x;
Теперь вы определили длину, но я бы поставил ее на единицу, а не на ноль:
int xLen = 1;
Почему один? Поскольку " 0 " - это цифра, поэтому, если пользователь вводит ноль, вы должны сказать, что его номер состоит из одной цифры.
Тогда я бы использовал while петля вместо а for:
while (x != 0)
   {
   ...
   }
Почему while- Просто потому, что так легче читать!
И внутри цикла я бы изменил значение x и считайте каждую цифру:
x = x / 10;
xLen++;
Затем после цикла распечатайте длину, которую вы разработали:
cout << endl << "The length is:" << xlen << endl;


Deepak Kumar Choudhary

Во-первых, большое вам спасибо за ответ. У меня есть некоторые сомнения. Прежде всего, почему вы инициализировали x в 0. Теперь я пытался определить цифры в один раз, десятки или сотые и так далее, поэтому я подумал, что могу использовать количество цифр на входе. Есть ли другой способ? Так получилось, что я новичок начального уровня.

OriginalGriff

Чтобы придать ему значение, это не обязательно-код будет работать без него, - но это "хорошая практика", чтобы убедиться, что у вас есть разумные значения во всех переменных.
Вам не нужно "идентифицировать" цифры, просто подсчитайте, сколько их (чтобы "идентифицировать" их, вам нужно было бы отделить их, что достаточно легко сделать, но вас об этом не просили)
Но вам нужно вычислить количество цифр, и это то, что делает цикл.
Предположим, вы входите в цикл с x, удерживающим 123. Поскольку это не ноль, он входит в цикл while, который удаляет цифру и увеличивает количество. Затем он снова вращается.

Но вы правы, один был ошибкой - и так было использование цикла while.
Так и должно было быть:

int xLen = 0;
делать
{
...
} while (x != 0);

Я виню в этом недостаток кофеина ... :смеяться:

Deepak Kumar Choudhary

Да. Я намерен найти числа в десятках, сотых и разовых местах. Как мне это закодировать? Это был мой второй вопрос. Я попытался использовать%10, чтобы найти место once, то есть если 22, и я хочу напечатать место once, я бы просто сделал%10 и a/10, чтобы вывести место once и tens, которые я 2 и 2 соответственно. Но я застрял в поиске программы, которая будет работать для любого большого числа, такого как 45645, какая логика должна быть использована там, это мой вопрос.

OriginalGriff

Это довольно очевидно, если вы подумаете об этом на секунду.
x % 10 извлекает самую низкую цифру.
x / 10 удаляет самую низкую цифру.
Итак, если вы используете их в цикле, что происходит?

Кстати: вы не получите 100 (или даже 22) цифр в целочисленном числе - они доходят только до 2,147,483,647, и даже 64-битное целое число (или длинное) будет доходить только до 9,223,372,036,854,775,807 - для действительно очень больших чисел вам нужно подумать еще раз...

Рейтинг:
18

Richard MacCutchan

Ваш for утверждение совершенно неверно. Правильный формат-это:

for (initial expression; comparison expression; repeat expression)
{
// body
}

Так что в вашем случае это должно быть что-то вроде:
// Start by setting i to the input number
// repeat while i is not equal to zero
// at the end of each loop add 1 to xlen
for(int i = x; i != 0; xlen++)
{
    i/=10;    // divide i by 10
}
// print results here


Рейтинг:
0

Patrice T

Решения 1 и 2 уже дают вам объяснение того, что не так в вашем коде.

Вместо того чтобы гадать, что может быть не так в вашем коде, используйте метод DIY, используйте отладчик чтобы увидеть, что на самом деле делает ваш код, вы найдете, что неправильно, сравнивая с тем, что он должен делать.
Совет: не пытайтесь упаковать свой код, чтобы сохранить строку или 2, вы ученик, попробуйте написать четкий код и поставить комментарии.
-----
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.