字符串转数字算法,求指点——-下面程序的功能是将一个整数字符串转换为一个整数,如”-1234”转换为-1234,程序思路不是很懂
字符串转数字算法,求指点——-下面程序的功能是将一个整数字符串转换为一个整数,如”-1234”转换为-1234,程序思路不是很懂详细介绍
本文目录一览: 如何将文本转化为数值
对于纯数字组成的字符串,转换成相应数值的一般利用标准函数。
举例说明正整数算法:
申请工作变量,赋初值为0
循环:当前字符为0值时结束
--取当前位,转换成相应数字:当前字符减去字符0可得到
--工作变量自乘以10
--工作变量加上边求取的数字
--将字符串下一字符当成当前字符,继续循环
循环结束后,工作变量为字符串表示的整数数值。
分别对C3:C7、D3:D7求和,虽然两个单元格区域的数据看上去一样,但求和结果却不相同。方法一、错误检查功能,如果单元格左上角显示绿色三角符号,该符号为“错误检查”功能的标识符,提醒用户单元格中可能存在错误。选中B3:B7单元格,会在单元格一侧出现错误检查选项按钮,单击按钮右侧的下拉箭头会显示选项菜单,选择【转换为数字】,就可以将文本型数据转为数值型。
将0、1字符串表示的二进制数转换成对应的十进制数,大家帮我看看这是什么算法
这有什么算法,
就是把二进制字符串转成整数,
while(*p!='\0')
{
y=y*2+*p-'0';
p++ ;
}
*p-'0'; 就是把一位二进制字符, 转成数字,
也就是: '0'转成0, '1' 转成 1
y=y*2+ ___
就是每多一位, 就乘以2, 因为是2进制
如何把字符串1234567890123456789012345678901234567890转化成2进制数
提供个思路和算法,请自己动手实现,这样对你有好处:
1、将字符串转成整数数组储存(假设Source),共40个元素(Source[0] 到 Source[39]),每个元素中保存1位;再定义1个数组用来保存转化后的二进制数(假设为Result);
2、转化2进制的算法:开始,判断:
2.1 如果数组Source末位元素 Source[39] , 如果为偶数,则输出1位二进制数为 0 ,如果为奇数,则输出1位 二进制数 1;
2.2 从 Source 数组 首元素开始依次往后,除以2并将结果仍保存在Source数组,注意可能存在借位的情况(比如第一次循环 Source[0]=1,Source[1]=2 ,则除以2以后结果为 Source[0]=0,Source[1]= 6;)
2.3 循环2.1、2.3 直到Source 数组所有的元素变成0;
3、将步骤2中输出的二进制数逆序输出,即可得到转化后的二进制数。
这个位数有点长
1234567890123456789012345678901234567890
稍微短一点可以用电脑上的计算器
【查看】【科学形】:
用什么语言,C还是JAVA,
字符串小数转数字小数算法。比如 “12.12”变成12.12
字符串转整数函数:
置当前字符索引为0,之前数为0
当前字符减字符0得到当前数
当前索引等于字符串长度减一循环结束
之前数=之前数乘10加当前数
以小数点为分隔符分割字符串
分别把两串字符串化整数
小数部分除以10的小数字符串长度减一的次方
两个数想加即可
具体的鲁棒性你可以自己添加写东西
魔兽jass里字符串和整数相互转换的具体算法
取"A","0","N","S"的ascii码,就是41304E53
然后转换为
10进制
是1093684819
算法的话也很简单
sum
=
hex("A")*16^8
+
hex("O")*16^4
+
hex("N")*16^2
+
hex("S")*16^0;
//hex()为
进制转换
的函数
hex(
int
n){
int
i=0,p,sum=0;
while(n>0){
p
=
(n%10)
*
power(16,i);
n
=
n/10;
sum
+=
p;
i++;
}
return
sum;
}
//power()是计算次方的函数,就不浪费时间了
求指点——-下面程序的功能是将一个整数字符串转换为一个整数,如”-1234”转换为-1234,程序思路不是很懂
第一处填*p也可以,都是判断p是否指向结尾
这个算法是比较麻烦的。搞的挺复杂。
main(){char s[6]; int n; gets(s); if(*s==’-’) n=-chnum(s+1); else n=chnum(s);//这个判断就是判断符号的。 没什么难的。 chnum函数, 只转换不算符号的部分。 printf(“%d\n”,n);}chnum(char *p){ int num=0,k,len,j; len=strlen(p); for( ;____________ ; p++ ) //循环是遍历整个数组, 正常应该是一个常数和len比较。 但是在循环里面len是变化的, 所以只要判断len就可以了。 所以填len!=0 { k=______________;//从下面看, k是累加到num上的。 还有一个循环是k=k*10. 所以 这里最终得到的k值,就是对应位上代表的实际值。 于是初始值为该位实际数字值。 填 *p-'0' j=--len;//j=--len,这样j就是当前p所在的位数,也就是个位j=0 十位j=1 百位j=2... while( _________ ) {k=k*10;}//根据j 也就是p指向的位置, 决定k乘几次10. 填j-- num=num+k;} return num;//这里少了一个返回。 }这个算法太麻烦了, 看看就好 没必要深究。
实际上这种运算, 常用的方法是这样的。
main(){char s[6]; int n; gets(s); if(*s==’-’) n=-chnum(s+1); else n=chnum(s); printf(“%d\n”,n);}chnum(char *p){ int num=0,k,len,j; len=strlen(p); for( j=0 ;j=len; j++ ) { num*=10; num+=p[j]-'0';//两句就可以搞定的 //再简化一下, 一句都可以 num=num*10+p[j]-'0'; 效果一样。 } return num;}
如何将16进制字符串转化成10进制输出
算法:
用变量a存放转换结果,赋初值为0
逐一取得字符串每个字符:从头一直取字符,直到遇到0为止
每取得一个字符:
-变量a自乘16
-判断字符是否数字字符,如果是数字字符则直接转换成数值
-否则,判断字符是否小写字母a~f,如果是转成10~15数值
-否则,判断字符是否大写字母a~f,如果是转成10~15数值
-将以上得到的数值加到变量a上,然后进行下一个字符的处理
例程:
#include
int h2d(char *s) { int a=0; while ( *s ) { a*=16; if ( *s>='0' && *s<='9' ) a+=*s-'0'; else if ( *s>='a' && *s<='f' ) a+=*s-'a'+10; else if ( *s>='A' && *s<='F' ) a+=*s-'A'+10; s++; } return a;}void main() { char s[256]; int x; scanf("%s",s); x=h2d(s); printf("%d\n",x);}
求一算法:在C#中怎么将数字字符串转换为数字?
//将字符串转换为数值
public static string StringToNumerical(stringstrOld)
{
string revalue="";
bool HadPoint=false;
for(int i=0;i
<strold.length;i++)
{
if((char)strOld[i]>='0' && (char)strOld[i]<='9')
{
reValue+=strOld[i].ToString();
}
else
{
if((char)strOld[i]=='.' && !HadPoint)
{
reValue+=".";
HadPoint=true;
}
else
{
break;
}
}
}
//当数值字符串为空时则默认为0
if(reValue=="")
{
reValue="0";
}
//消除数值前面的0,如00123应该为123
for(i=0;i
<revalue.length;i++)
{
if(reValue[i].ToString()=="0")
{
reValue=reValue.SubString(1,reValue.Length-1);
}
}
//最后一位是"."则去掉"."
if(reValue.EndWith('.'))
{
revalue=reValue.SubString(0,CreValue.Length-1);
}
//第一位是"."则在数值字符串前加0
if(reValue.BeginWith('.'))
{
reValue="0"+reValue;
}
return reValue;
}
写个思路吧:
首先检查字符串中是否有数字和小数点之外的字符,然后使用decimal.Parse(yourString)即可
例如:
try
{
decimal num=decimal.Parse(this.textBox1.Text);
this.textBox2.Text=num.ToString();
}
catch
{
MessageBox.Show("输入的字符串中含有非法字符");
}
我靠,数字还字符串 那不和数字一样啊!
public double GetNumber(string str)
{
Regex reg = new Regex("(?
[0-9]*\.?[0-9]*)");
Match m = reg.Match(str);
double aa =Convert.ToDouble( m.groups["gg"]);
return aa;
}
用正则式吧,这个比较好,没有BUg的。建议用这个。如果你说不用Convert那么我们就返回字符串得了
public string GetNumber(string str)
{
Regex reg = new Regex("(?
[0-9]*\.?[0-9]*)");
Match m = reg.Match(str);
string aa =m.groups["gg"];
return aa;
}
正确答案如下:
public string GetNumber(string input)
{
Match m = Regex.Match(input, "(?:\\d*(\\.\\d*)?)");
return m.Value;
}
上面的代码经过了测试,可以正常工作
string s = GetNumber("123asdf");
string a = GetNumber("123.45sadf");
string e = GetNumber("123.sadf");
楼上的有才!
我的办法:
double x=123.21;
整体转换:
string y=Convert.ToString(x);
单个转换用y.split
奖励分的话可以帮写详细代码,要一点时间
///
</revalue.length;i++)
</strold.length;i++)
/// 作者:三角猫
/// 说明:如果输入的字符串为空或非数字开头则返回0,否则返回解析结果
///
///
输入的字符串
///
解析后的结果
static double CustomNumericParse(string v)
{
if (string.IsNullOrEmpty(v)) return 0d; //如果输入的字符串为空或NULL,则直接返回0
if (!char.IsDigit(v[0])) return 0d; //如果输入的字符串是非数字开头,直接返回0
string subV = string.Empty;
for (int i = 0; i < v.Length; i++)
{
if (char.IsDigit(v[i]) || (v[i].Equals('.') && !subV.Contains("."))) //从左至右,判断字符串的每位字符是否是数字或小数点,小数点只保留第一个
subV += v[i];
else
break;
}
subV.TrimEnd(new char[] { '.' }); // 如果解析后的子字符串的末位是小数点,则去掉它
double returnV = 0d;
if (subV.Contains(".")) // 如果解析结果包含小数点,则根据小数点分两段求值
{
string strPointRight = subV.Substring(subV.IndexOf('.') + 1); //小数点右侧部分
subV = subV.Substring(0, subV.IndexOf('.')); //小数点左侧部分
//计算小数点右侧的部分
for (int i = 0; i < strPointRight.Length; i++)
{
returnV += ((int)strPointRight[i] - 48) / Math.Pow(10, i+1); //(int)strPointRight[i] 是取该字符的ASCII码
}
}
//计算小数点左侧的部分
int iLen = subV.Length; //小数点左侧部分的长度
for (int i = 0; i < iLen; i++)
{
returnV += ((int)subV[i] - 48) * Math.Pow(10, iLen - 1 - i); //按位乘以10的幂,并和小数点右侧结果相加
}
return returnV;
}
//使用方法
string a = "123.98adfd"; Console.Write(CustomNumericParse(a));
输入一个八进制数字字符串,将其转换成十进制数后输出。C语言
int main()
{
char str[1024] = {0};
int i;
int result = 0;
gets(str);
for(i = 0; i < strlen(str); i ++)
{
if(str[i] > '7' || str[i] < '0')
{
printf("invalid char found\n");
return -1;
}
result *= 8;
result += str[i] - '0';
}
printf("result is %d\n", result);
}
输入一个八进制数字字符串,将其转换成十进制数后输出的C语言代码示例如下:
#include
void main(){ int i=0,n=0; char a[20];//一般20就够用了
printf("请输入一个八进制数:\n");
gets(a); while(a[i]!='\0'){
n=n*8+a[i]-'0';//核心算法
i++;
} printf("转换为十进制数为:%d\n",n);
}
以下是 C 语言代码示例:
```c
#include
#include
int main() {
char octal[20];
int decimal = 0, i, len;
printf("请输入一个八进制数字:");
scanf("%s", octal);
len = strlen(octal);
for (i = 0; i < len; i++) {
decimal += (octal[i] - '0') * pow(8, len-i-1);
}
printf("转换为十进制数为:%d\n", decimal);
return 0;
}
```
该代码中,首先使用 `scanf` 函数读入一个字符串。由于输入的是一个八进制数字字符串,因此可以直接使用字符数组存储。
然后,使用循环遍历该字符串的每一位数字,并将其转换为十进制数。在计算过程中,将每一位数字乘以 8 的相应次幂,然后依次加起来即可。
最后,使用 `printf` 函数输出转换后的十进制数。运行程序后,输入一个八进制数字字符串,例如 123,然后输出的结果为:
```
转换为十进制数为:83
```
因此,输入的八进制数字 123 转换为十进制数为 83。