如何提取一个字符串里数字保存到数组里

时间:2023-01-04 08:03:56
比如:"一等奖  奖金500万  二等奖 奖金 50万 三等奖 奖 4000" 这个字符串里含有中文,空格,数字。

刚才编写了个程序,虽然能提取数字了,但是并不能实现500,50,4000是三个数值啊? 

请问 各位高手:如何将字符串里的 500, 50, 4000,都存储在一个整型数组里啊?

11 个解决方案

#1


看C程序设计题解与上级指导122页 10.16

#2


调用函数atoi转换一下就可以了

#3


atoi() atof();等

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
  double n,m;
  double pi=3.1415926535;
  char szInput [256];
  printf ( "Enter degrees: " );
  gets ( szInput );
  n = atof ( szInput );
  m = sin (n*pi/180);
  printf ( "The sine of %f degrees is %f\n" , n, m );
  return 0;
}

#4


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
    char array[40];

int i;

gets(array);

int IsNumber=0;

for(i=0; array[i]!='\0'; i++)
{
if(array[i]>='0'&&array[i]<='9')
{
           printf("%c", array[i]);

   IsNumber=1;
}

if(array[i]==' '&&IsNumber==1)
{
   printf(" ");

   IsNumber=0;
}
}
printf("\n");

}

#5


引用 2 楼 lemonlinger 的回复:
调用函数atoi转换一下就可以了
++

#6


引用 2 楼 lemonlinger 的回复:
调用函数atoi转换一下就可以了

http://hi.baidu.com/jiaolingqi/blog/item/3fb63a9ba776cdb4c9eaf4b5.html

#7


C#窗体应用程序: 用了三个控件  textBox1里放置要提取的字符串
button1 点击获得结果
textBoxResult里放置提取出的数字


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetNumber
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            string number="";
            List<Int32> myList = new List<int>();
            for (int i = 0; i < str.Length; ++i)
            {
                if (str[i] >= '0' && str[i] <= '9')
                {
                    number += str[i];
                    if (i == str.Length - 1)
                    {
                        myList.Add(Convert.ToInt32(number));
                    }
                }
                else
                {
                    if (!res.Equals(""))
                    {
                        myList.Add(Convert.ToInt32(number));
                        res = "";
                    }
                }
            }
            for (int i = 0; i < myList.Count; ++i)
            {
                textBoxResult.Text += myList[i];
                textBoxResult.Text += " ";
            }
        }
    }
}

#8


上面的代码有个小问题修整下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetNumber
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            string number="";
            List<Int32> myList = new List<int>();
            for (int i = 0; i < str.Length; ++i)
            {
                if (str[i] >= '0' && str[i] <= '9')
                {
                    number += str[i];
                    if (i == str.Length - 1)
                    {
                        myList.Add(Convert.ToInt32(number));
                    }
                }
                else
                {
                    if (!number.Equals(""))
                    {
                        myList.Add(Convert.ToInt32(number));
                        number = "";
                    }
                }
            }
            for (int i = 0; i < myList.Count; ++i)
            {
                textBoxResult.Text += myList[i];
                textBoxResult.Text += " ";
            }
        }
    }
}

结果如下图:
如何提取一个字符串里数字保存到数组里

#9


#include <iostream>
#include <cstdio>
using namespace std;

void findNum(const char *str)
{
int result=0;

while(*str!=0)
{
if('0'<=*str && *str<='9')
{
result=result*10+*str-'0';
}
else
{
if(result!=0)
{
cout<<result<<endl;
result=0;
}
}

++str;
}
}

int main()
{
char buffer[200];

fgets(buffer,200,stdin);
findNum(buffer);

return 0;
}

一等奖 奖金500万 二等奖 奖金 50万 三等奖 奖 4000
500
50
4000
请按任意键继续. . .


#10


sprintf参数说明及应用举例
  sprintf格式的规格如下所示。[]中的部分是可选的。
  %[指定参数$][标识符][宽度][.精度]指示符
  若想输出`%'本身时, 请这样`%%'处理。
  1. 处理字符方向。负号时表示从后向前处理。
  2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
  3. 字符总宽度。为最小宽度。
  4. 精确度。指在小数点后的浮点数位数。
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
转换字符
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  %% 印出百分比符号,不转换。
  %c 整数转成对应的 ASCII 字元。
  %d 整数转成十进位。
  %f 倍精确度数字转成浮点数。
  %o 整数转成八进位。
  %s 整数转成字符串。
  %x 整数转成小写十六进位。
  %X 整数转成大写十六进位。
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  <?
  $money = 123.1
  $formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"
  $formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"
  $formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
  $formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
  ?>
http://baike.baidu.com/view/1295144.htm

#11


引用 4 楼 alang512 的回复:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
  char array[40];

int i;

gets(array);

int IsNumber=0;

for(i=0; array[i]!='\0'; i++)
{
if(array[i]>='0'&amp;&amp……

大哥你给介绍一下IsNumber的含义行不?

#1


看C程序设计题解与上级指导122页 10.16

#2


调用函数atoi转换一下就可以了

#3


atoi() atof();等

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
  double n,m;
  double pi=3.1415926535;
  char szInput [256];
  printf ( "Enter degrees: " );
  gets ( szInput );
  n = atof ( szInput );
  m = sin (n*pi/180);
  printf ( "The sine of %f degrees is %f\n" , n, m );
  return 0;
}

#4


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
    char array[40];

int i;

gets(array);

int IsNumber=0;

for(i=0; array[i]!='\0'; i++)
{
if(array[i]>='0'&&array[i]<='9')
{
           printf("%c", array[i]);

   IsNumber=1;
}

if(array[i]==' '&&IsNumber==1)
{
   printf(" ");

   IsNumber=0;
}
}
printf("\n");

}

#5


引用 2 楼 lemonlinger 的回复:
调用函数atoi转换一下就可以了
++

#6


引用 2 楼 lemonlinger 的回复:
调用函数atoi转换一下就可以了

http://hi.baidu.com/jiaolingqi/blog/item/3fb63a9ba776cdb4c9eaf4b5.html

#7


C#窗体应用程序: 用了三个控件  textBox1里放置要提取的字符串
button1 点击获得结果
textBoxResult里放置提取出的数字


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetNumber
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            string number="";
            List<Int32> myList = new List<int>();
            for (int i = 0; i < str.Length; ++i)
            {
                if (str[i] >= '0' && str[i] <= '9')
                {
                    number += str[i];
                    if (i == str.Length - 1)
                    {
                        myList.Add(Convert.ToInt32(number));
                    }
                }
                else
                {
                    if (!res.Equals(""))
                    {
                        myList.Add(Convert.ToInt32(number));
                        res = "";
                    }
                }
            }
            for (int i = 0; i < myList.Count; ++i)
            {
                textBoxResult.Text += myList[i];
                textBoxResult.Text += " ";
            }
        }
    }
}

#8


上面的代码有个小问题修整下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetNumber
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            string number="";
            List<Int32> myList = new List<int>();
            for (int i = 0; i < str.Length; ++i)
            {
                if (str[i] >= '0' && str[i] <= '9')
                {
                    number += str[i];
                    if (i == str.Length - 1)
                    {
                        myList.Add(Convert.ToInt32(number));
                    }
                }
                else
                {
                    if (!number.Equals(""))
                    {
                        myList.Add(Convert.ToInt32(number));
                        number = "";
                    }
                }
            }
            for (int i = 0; i < myList.Count; ++i)
            {
                textBoxResult.Text += myList[i];
                textBoxResult.Text += " ";
            }
        }
    }
}

结果如下图:
如何提取一个字符串里数字保存到数组里

#9


#include <iostream>
#include <cstdio>
using namespace std;

void findNum(const char *str)
{
int result=0;

while(*str!=0)
{
if('0'<=*str && *str<='9')
{
result=result*10+*str-'0';
}
else
{
if(result!=0)
{
cout<<result<<endl;
result=0;
}
}

++str;
}
}

int main()
{
char buffer[200];

fgets(buffer,200,stdin);
findNum(buffer);

return 0;
}

一等奖 奖金500万 二等奖 奖金 50万 三等奖 奖 4000
500
50
4000
请按任意键继续. . .


#10


sprintf参数说明及应用举例
  sprintf格式的规格如下所示。[]中的部分是可选的。
  %[指定参数$][标识符][宽度][.精度]指示符
  若想输出`%'本身时, 请这样`%%'处理。
  1. 处理字符方向。负号时表示从后向前处理。
  2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
  3. 字符总宽度。为最小宽度。
  4. 精确度。指在小数点后的浮点数位数。
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
转换字符
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  %% 印出百分比符号,不转换。
  %c 整数转成对应的 ASCII 字元。
  %d 整数转成十进位。
  %f 倍精确度数字转成浮点数。
  %o 整数转成八进位。
  %s 整数转成字符串。
  %x 整数转成小写十六进位。
  %X 整数转成大写十六进位。
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  <?
  $money = 123.1
  $formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"
  $formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"
  $formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
  $formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
  ?>
http://baike.baidu.com/view/1295144.htm

#11


引用 4 楼 alang512 的回复:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
  char array[40];

int i;

gets(array);

int IsNumber=0;

for(i=0; array[i]!='\0'; i++)
{
if(array[i]>='0'&amp;&amp……

大哥你给介绍一下IsNumber的含义行不?