logo

Перетворення рядка на int у C

Перетворення рядка в int є повторюваним завданням у світі програмування. Незважаючи на те, що це просте завдання, багато кодерів або зазнають невдачі, або заплутаються, роблячи це. Перетворення здебільшого виконується для того, щоб ми могли виконувати операції над числами, які зберігаються як рядки.

приклад:



str=163″

число=163

C — строго типізована мова. Ми отримаємо повідомлення про помилку, якщо спробуємо ввести значення, неприйнятне для типу даних. Не тільки у вхідних даних, ми отримаємо помилку під час виконання операцій.



Існує 3 способи перетворення рядка в int, а саме:

    Використання atoi() Використання циклів Використання sscanf()

1. Перетворення рядків за допомогою atoi()

Функція atoi() у C приймає масив символів або рядковий літерал як аргумент і повертає його значення в ціле число . Це визначено в файл заголовка.

Якщо спостерігати буксирувати() трохи ближче ви побачите, що це означає:



Поділ atoi() простими словами

Поділ atoi() простими словами

актриса кіно реха

приклад:

C




// C program to demonstrate the> // functioning of the atoi() function> #include> #include> int> main()> {> >char>* str1 =>'141'>;> >char>* str2 =>'3.14'>;> > >// explicit type casting> >int> res1 =>atoi>(str1);> >// explicit type casting> >int> res2 =>atoi>(str2);> > >printf>(>'atoi(%s) is %d '>, str1, res1);> >printf>(>'atoi(%s) is %d '>, str2, res2);> > >return> 0;> }>

>

>

Вихід

atoi(141) is 141 atoi(3.14) is 3>

Atoi поводиться дещо інакше для string. Давайте перевіримо, як:

приклад:

рядок до цілих чисел

C




// C Program to implement> // Atoi function with char array> #include> #include> > int> main()> {> >char>* str1 =>'Geek 12345'>;> >char>* str2 =>'12345 Geek'>;> > >int> num1 =>atoi>(str1);> >int> num2 =>atoi>(str2);> > >printf>(>'%d is of '%s' '>, num1, str1);> >printf>(>'%d is of '%s' '>, num2, str2);> > >return> 0;> }>

>

>

Вихід

0 is of 'Geek 12345' 12345 is of '12345 Geek'>

Пояснення:

  • Виродок 12345 тут «Виродок» є першим словом, тому відповідь буде: 0 (без числа)
  • 12345 Виродок тут «12345» є першим словом, тому відповідь буде: 12345

2. Використання циклів

Ми можемо використовувати цикли для перетворення рядка в ціле число, обходячи кожен елемент рядка один за іншим і порівнюючи символи чисел з їхніми значеннями ASCII, щоб отримати їх числові значення, і використовуючи певну математику для генерації цілого числа. Наведений нижче приклад демонструє, як це зробити.

приклад:

C




// C Program to convert string> // into integer using for loop> #include> #include> > int> main()> {> >char>* str =>'4213'>;> >int> num = 0;> > >// converting string to number> >for> (>int> i = 0; str[i] !=>' '>; i++) {> >num = num * 10 + (str[i] - 48);> >}> > >// at this point num contains the converted number> >printf>(>'%d '>, num);> >return> 0;> }>

>

>

Вихід

4213>

Примітка: ми використали str[i] – 48 для перетворення символу числа в числові значення. Для напр. Значення ASCII символу «5» дорівнює 53, отже, 53 – 48 = 5, що є його числовим значенням.

3. Використання sscanf()

Ми можемо використовувати sscanf(), щоб легко перетворити рядок на ціле число. Ця функція читає відформатований вхід із рядка.

Синтаксис sscanf:

int sscanf (const char * source, const char * formatted_string, ...);>

Параметри :

    джерело – вихідний рядок. formatted_string – рядок, який містить специфікатори формату . … : – список аргументів змінних, який містить адреси змінних, у яких ми хочемо зберігати вхідні дані.

Цих аргументів має бути принаймні стільки, скільки значень зберігають специфікатори формату. У разі успіху функція повертає кількість заповнених змінних. У разі помилки введення, перш ніж будь-які дані можуть бути успішно прочитані, EOF повертається.

приклад:

C

підключення java mysql




// C program to demonstrate> // the working of SSCANF() to> // convert a string into a number> #include> > int> main()> {> >const> char>* str1 =>'12345'>;> >const> char>* str2 =>'12345.54'>;> >int> x;> > >// taking integer value using %d format specifier for> >// int> >sscanf>(str1,>'%d'>, &x);> >printf>(>'The value of x : %d '>, x);> > >float> y;> >// taking float value using %f format specifier for> >// float> >sscanf>(str2,>'%f'>, &y);> >printf>(>'The value of x : %f '>, y);> > >return> 0;> }>

>

>

Вихід

The value of x : 12345 The value of x : 12345.540039>

Чи можемо ми привести String до int?

Відповідь така НІ . Якщо ми використовуємо приведення типів для перетворення рядка в число, ми отримаємо помилку, як показано в прикладі нижче.

приклад:

C

абстрактний клас проти інтерфейсу




// C Program to check the output> // of typecasting from string to integer> #include> > int> main()> {> >string str =>'8'>;> >int> num;> > >// Typecasting> >num = (>int>)str;> >return> 0;> }>

>

>

Вихід:

main.c: In function ‘main’: main.c:9:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 9 | num = (int)str; | ^ 1683652612>

Пояснення: Як обидва string і int не належать до однієї ієрархії об’єктів , ми не може виконувати неявне або явне приведення типу як ми можемо зробити у випадку перетворення double на int або float на int.

У наведеному вище коді ми бачимо, що результат видає попередження з будь-яким сміттєвим значенням у ньому. Тому, щоб уникнути таких умов, ми використовуємо методи, зазначені вище.