C ++读取数字字符串并将特定位置字符捕获为int

时间:2016-03-15 18:53:21

标签: c++ string int assign

我需要我的程序读取用户输入的一串数字,然后将每个数字分配给一个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; 

但它会转换整个字符串,如果有办法在其中添加ind位置,如

string1.substr(0,1)

那就是诀窍......

3 个答案:

答案 0 :(得分: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编码的系统上正常工作,但您不太可能遇到此类问题。

答案 1 :(得分: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矢量中有你的数字。

答案 2 :(得分:-1)

enter image description here

此示例使用字符,因为字符串仍然是char数组。 这适用于您使用Windows的情况。只需输入并按下enter键即可。 就像迪特尔·吕克(DieterLücking)所说的那样,它具有这个特点。

它使用kbhit()中的getch()conio.h来处理单个字符。 然后它将字符乘以适当的位置以获得完整的整数。 然后将它们存储在数组digitArray[ ]中,然后将它们分配给abcde。现在,您可以对abcde执行任何操作。

以下是一些要演示的代码。

   // 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);
}

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