2016-03-15 3 views
0

мне нужна программа для чтения строки ввода чисел пользователем, а затем назначить каждый номер к ИНТ переменной:C++ прочитать номер строки и захватить определенную позицию символа, как INT

94715 вводится пользователем в строке

затем

a=9 
b=4 
c=7 
d=1 
e=5 

, так что я могу

if (a < b), c*d+e, a-e, etc 

Я искал некоторые команды (getline, string.substr (ind, n), getc, fgetc, atoi и т. Д.) Я знаю, что я близко, но я не могу найти примеры именно того, что я ищу.

Самый простой и самый прямой путем я нашел

stringstream convert(string1); 
convert>>variable; 

, но он преобразует всю строку, если есть способ, чтобы добавить ое положение в нем, как

string1.substr(0,1) 

что «d сделать трюк ...

+0

Таким образом, цифры должны быть десятичными цифрами? Помните, что 'char c = '0'; c - '0' == 0'. –

+0

Есть ли какие-либо ограничения на вход? например, пользователь должен ввести ровно 5 цифр и т. д. –

+0

Прочитайте одно целое без знака, убедитесь, что значение находится в диапазоне [00000, 100000) и извлекает цифры (по модулю 10 и делятся на 10). Для ведущих нулей вам нужно прочитать строку из пяти символов и преобразовать через istingstream. –

ответ

1

это так просто, как это:

std::string num = "94715"; 
size_t i = 0; 
assert(num.length() > 4); 
int a = num[i++] - '0'; 
int b = num[i++] - '0'; 
int c = num[i++] - '0'; 
int d = num[i++] - '0'; 
int e = num[i++] - '0'; 

Примечание: это может не работать должным образом в системах, не использующих кодирование ACII, но вряд ли вы столкнетесь с такой проблемой.

+0

простой, простой, быстрый.Большое спасибо!! : D – Razha

0
int number = 9544; 
int vector[10]; // you can make it as big as you want or simply use std::vector 
int position = 0; 
while (number != 0) 
{ 
    vector[position++] = number % 10; // this assigns the last digit 
    number = number/10; // remove the last digit 
} 
for(int i=0; i<position; i++) 
    std::cout << vector[i]; // this will print 4459 

Теперь у вас есть цифры вашего номера внутри вектора int.

-1

enter image description here

В этом примере используется символы, потому что строка еще массив символов. Это для, если вы находитесь в Windows. Просто введите и нажмите клавишу enter. Как сказал Дитер Люкинг, он делает этот персонаж по характеру.

Для обработки одиночных символов используется kbhit() и getch(), найденное в conio.h. Затем он умножает символы с подходящим положением, чтобы получить полное целое число. И затем он хранит их в массиве digitArray[ ] и присваивает их a, b, c, d или e после. Теперь вы можете делать все с a, b, c, d и e.

Вот какой код для демонстрации.

// Re: Now it is just clunky 
    //   one    ten    hundred    thousand 
    //   1     2     3     4 
    //digitn=digitArray[3]*1 + digitArray[2]*10 +digitArray[1]*100 +digitArray[0]*1000 

#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string> 
using namespace std; 

int digit=0,digitInput=0; 
int digitArray[10]={0},digitn; 
int numberOfInputDigits=7; 
void SplitIntoDigits(void); 
int a=0,b=0,c=0,d=0,e=0,f=0; 


int main(){ 

    system("color 1F");  //Blue background  
    while(1){ 

     cout<<"\nPlease enter number. Max Input is "<<numberOfInputDigits<<" individual digits \n"; 
     cout<<"or press enter when done \n>" ;  

     memset(digitArray,0,sizeof(digitArray)); 
     a=0;b=0;c=0;d=0;e=0;f=0; 

     SplitIntoDigits(); 

     //cout<<"\n"<<digitArray[7]="<<digitArray[7]; 
     cout<<"\n\n"; 

     a = digitArray[0]; 
     b = digitArray[1]; 
     c = digitArray[2]; 
     d = digitArray[3]; 
     e = digitArray[4]; 
     f = digitArray[5]; 

     cout<<"a = "<< a <<"\n"; 
     cout<<"b = "<< b <<"\n"; 
     cout<<"c = "<< c <<"\n"; 
     cout<<"d = "<< d <<"\n"; 
     cout<<"e = "<< e <<"\n"; 
     cout<<"f = "<< f <<"\n"; 


     cout<<"\n\n The whole combined int number is "<<digitn<<"\n\n"; 

    } 


    return 0; 
} 


/********************************* 
*        * 
********************************/ 

void SplitIntoDigits(void){ 
    digitArray[0]=0; 
    digitArray[1]=0; 
    digit=0; 
    digitInput=0; 

    while((digit<numberOfInputDigits)){ 
     if (kbhit()){ 

      digitInput=getch(); 
      if (digitInput==27) exit(0); 

      if ((digitInput>47) && (digitInput<59)) { 
      digitArray[digit]=(unsigned char)digitInput-48; 
      digit++; 

      cout<<digitInput-48; 

      } 
      if (digitInput==13) { digitn=digitArray[0]; break; } 
     } 
    } 

    switch(digit) { 
     case 0: 
     case 1: 
      digitn=digitArray[0]*1 ; 
     break; 

     case 2: 
      digitn= digitArray[1]*1 +digitArray[0]*10 ; 
     break; 

     case 3: 
      digitn= digitArray[2]*1+digitArray[1]*10 +digitArray[0]*100 ; 
     break; 

     case 4: 
      digitn=digitArray[3]*1+digitArray[2]*10+digitArray[1]*100+digitArray[0]*1000 ; 
     break; 

     case 5: 
      digitn=digitArray[4]*1+digitArray[3]*10+digitArray[2]*100+digitArray[1]*1000+digitArray[0]*10000 ; 
     break; 

     case 6: 
      digitn=digitArray[5]*1+digitArray[4]*10+digitArray[3]*100+digitArray[2]*1000+digitArray[1]*10000 
        +digitArray[0]*100000; 
     break; 


     case 7: 
      digitn=digitArray[6]*1+digitArray[5]*10+digitArray[4]*100+digitArray[3]*1000+digitArray[2]*10000 
        +digitArray[1]*100000 +digitArray[0]*1000000; 
     break; 


     case 8: 
      digitn=digitArray[7]*1+digitArray[6]*10+digitArray[5]*100+digitArray[4]*1000+digitArray[3]*10000 
        +digitArray[2]*100000 +digitArray[1]*1000000+digitArray[0]*10000000; 
     break; 

     case 9: 
      digitn=digitArray[8]*1+digitArray[7]*10+digitArray[6]*100+digitArray[5]*1000+digitArray[4]*10000 
        +digitArray[3]*100000 +digitArray[2]*1000000+digitArray[1]*10000000 +digitArray[0]*100000000; 
     break; 


    } 


    // if (digitInput!=13) digitn=digitArray[3]*1+digitArray[2]*10+digitArray[1]*100+digitArray[0]*1000 ; 
    //cout<<("\n%i\n\n",digitn); 
} 

/********************************* 
*        * 
********************************/ 
+0

Ни в коем случае: 'using namespace std;' и используя 'global variables'. Это плохой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^