精华内容
下载资源
问答
  • 字符串相加与计算的区别 #!/bin/bash i=0123456789 for a in {1..8} do b=${i:$RANDOM%10:1} let p+=$b done echo $p #结果为数字相加 #!/bin/bash i=0123456789 for a in {1..8} do b=${i:$RANDOM%10:1}...

    LINUX中计算必须用

    字符串相加与计算的区别

    #!/bin/bash
    i=0123456789
    for a in {1..8}
    do
      b=${i:$RANDOM%10:1}
      let p+=$b
    done
    echo $p
    
    
    #结果为数字相加

     

    #!/bin/bash
    i=0123456789
    for a in {1..8}
    do
      b=${i:$RANDOM%10:1}
      p+=$b
    done
    echo $p
    
    
    #结果为字符串相加

    方法一:

    expr 1 + 1

    expr 2 - 1

    expr 2 \* 2    #   \转义符号  屏蔽之后一个字符的特殊含义

    expr 9 / 3 

    expr 5 % 2    #求模  取余数

    方法二:

    echo $[1+1]

    echo $[8-5]

    echo $[8*6]

    echo $[8/2]

    echo $[8%3]

    方法三:

    let   运算结果不显示,通常用于使用运算结果定义变量的值,或者对变量进行自增减

    常规写法        主流写法

    let a=a+1        let a++

    let a=a-1        let a--

    let a=a+2        let a+=2

    let a=a+b        let a+=b

    let a=a*b        let a*=b

     

    方法四:bc计算器,可以计算小数

    bc    #常规使用

    1+1 

    2-1

    echo 1.1+2 | bc   #非交互式使用

    scale3  #定义小数点后长度

    echo "scale=3;10/3" |bc  #定义小数点后并运算

     

     

    展开全文
  • #设置A变量值 A=aaaaaaaaaa #设置B变量值 B=bbbbbbbbbb #${A}${B} = aaaaaaaaaabbbbbbbbbb #中间可以插入其他字符,如 ${A}@${B}
    #设置A变量值
    A=aaaaaaaaaa
    #设置B变量值
    B=bbbbbbbbbb
    #${A}${B} = aaaaaaaaaabbbbbbbbbb
    #中间可以插入其他字符,如 ${A}@${B}
    展开全文
  • 我们可以使用字符串来表示整数,可以由我们规定位数,这样就可以实现更大的(某种意义上的任意长)整数相加减。在这里,我使用字符串实现的是两个任意长整数相加。由于是使用的字符串,需要考虑的情况很多。下面我...

    Linux环境下,C语言中整数类型最长的是long long类型,占8个字节,即使如此,其能表示的数仍是有限的。如果想要实现更大的整数相加或其他运算,就不能只用long long类型或者普通整型。我们可以使用字符串来表示整数,可以由我们规定位数,这样就可以实现更大的(某种意义上的任意长)整数相加减。在这里,我使用字符串实现的是两个任意长整数相加。由于是使用的字符串,需要考虑的情况很多。下面我罗列几个需要注意的点:

    1、输入的问题:

    使用的输入方法不同,需要注意的点也不同。若是使用scanf("%s",str),需要考虑字符数组的大小,但使用这个函数有个缺点,如果无意输入了空格,由于该函数不读空格,检测不出这个错误。我使用的是fgets(str,SIZE,stdin)函数,需要注意的是,若是输入的字符串长度(不包括回车)小于SIZE-1,则会将回车符读入,需要去掉回车符;若是输入的字符串长度(不包括回车)等于或大于SIZE-1,多余的字符(包括回车)不会读入,但是会留在缓冲区,输入下一个字符串时,会直接将这些字符读入,所以要先清空缓冲区(再用fgets读一下)。

    2、是否是数字:

    在字符串读取后,需要判断每一个字符是否是数字字符或者'\0',不是的话就要报错。

    3、对齐的问题:

    我们进行整数加法是最低位对齐的,从最低位开始计算,但是我们输入字符数字后,字符串是从最高位对齐的。所以解决的办法可以将两个字符串逆序,计算后将结果逆序回来。

    4、进位的问题:

    进行正常的整数加法不需要我们考虑进位问题,计算机会给我们解决。但是使用字符串计算就需要考虑这个问题了,当两个数相加后(这里还要考虑一个问题就是不能直接字符相加,需要减掉一个字符0),大于字符9,就要进位,下一位计算时要考虑前一位是否进位过来。(当两个字符串不等长时,不等长的部分相加不需要减字符0)最后还要考虑最高位的问题,如果有进位,长度会加1,要处理一下以保证正常输出。

    其他的一下细节大家细心一点就行,下面是我实现的具体代码:

    #include <stdio.h>
    #include <string.h>
    #define SIZE 1024  //输入的数最长为SIZE-1
    
    //字符串数字相加
    int add(char *str1,char *str2,char *str3,int len)
    {
    	if(str1 == NULL || str2 == NULL || str3 == NULL)
    	{
    		printf("参数错误\n");
    		return -1;
    	}
    	int i;
    	for (i = 0;i < len ;i++)
    	{
    		if(str1[i] == 0 || str2[i] == 0)  //如果某个字符串对应位为'\0',结果为另一个字符串对应位的值
    		{
    			str3[i] += (str1[i] + str2[i]);
    		}
    		else  //如果两个字符串对应位都不为'\0',结果为两个字符ASCII码值相加并减去字符0的ASCII码值。
    		{
    			str3[i] += str1[i] + str2[i] - '0';
    		}
    		if(str3[i] > '9')  //如果相加后的结果大于字符9的ASCII码值,则需要进位(更高位加1),原本位ASCII码值减10
    		{
    			str3[i+1] += 1;
    			str3[i] -= 10;
    		}
    	}
    	if(str3[i] > 0)  //最高位若是向更高为有进位,将数字1转换为字符1
    	{
    		str3[i] += '0';
    	}
    	return 0;
    }
    
    //字符串逆序
    int Reverse(char *str,int len)
    {
    	if (str == NULL)
    	{
    		printf("参数错误\n");
    		return -1;
    	}
    	int i;
    	char tmp;
    	for(i = 0;i < len/2;i++)
    	{
    		tmp = str[i];
    		str[i] = str[len-i-1];
    		str[len-i-1] = tmp;
    	}
    	return 0;
    }
    
    //检查字符串中有没有非数字字符并去掉回车符
    int check(char *str,int *len)
    {
    	if (str == NULL || len == NULL)
    	{
    		printf("参数错误\n");
    		return -1;
    	}
    	if(str[(*len)-1] == '\n')  //去掉回车符
    	{
    		str[(*len)-1] = 0;
    		(*len)--;
    	}
    	int i;
    	for(i = 0;i < *len;i++)
    	{
    		if(str[i] != 0 && (str[i] < '0' || str[i] > '9'))
    		{
    			printf("输入的数字中有非数字以外的字符!\n");
    			return -1;
    		}
    	}
    	return 0;
    }
    
    int main()
    {
    	//初始化三个字符串
    	char str1[SIZE] = {0};
    	char str2[SIZE] = {0};
    	char str3[SIZE+1] = {0};
    	
    	//输入字符串
    	printf("input a number        : ");
    	fgets(str1,SIZE,stdin);
    	int len1 = strlen(str1);
    	int lentmp = len1;
    	if(check(str1,&len1))  //检查字符串中有没有非数字字符并去掉回车符
    		return -1;
    	if(len1 == lentmp)  //如果有字符没有被读取,则先读掉
    	{
    		fgets(str2,SIZE,stdin);
    	}
    	
    	printf("input another number  : ");
    	fgets(str2,SIZE,stdin);
    	int len2 = strlen(str2);
    	if(check(str2,&len2))
    		return -1;
    	
    	//逆序两个字符串,使得表示的数字最低位对齐
    	if(Reverse(str1,len1))
    		return -1;
    	if(Reverse(str2,len2))
    		return -1;
    	
    	//判断两个字符串长短,取更长的字符串的长度作为参数给add函数
    	int len;
    	len1 > len2 ? (len = len1) : (len = len2);
    	if(add(str1,str2,str3,len))
    		return -1;
    	
    	//将结果逆序回来
    	int len3 = strlen(str3);
    	if(Reverse(str3,len3))
    		return -1;
    	
    	printf ("The sum of two numbers: %s\n",str3);
    	
    	return 0;
    }





    有关更多字符串和整数之间的相互转换的知识,希望和大家一起讨论分享。

    展开全文
  • 利用expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0.如果为0,就认为加法的变量或字符串为整数,否则就不是。  i=5 expr $I + 6 &>/dev

    在实际的应用开发中,由于shell缺少许多函数库,所以判断字符串是否为整数就不是一件容易的事儿,那么这里介绍一般的用于判断一个字符串是否为整数的方法。


    原理:

    一、利用expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0.如果为0,就认为加法的变量或字符串为整数,否则就不是。

     i=5

    expr $I + 6 &>/dev/null

    echo $?

    如果输出的是0,那么表明i是整数,反之则表示为非整数。其中$?表示的是最后运行的代码的返回值

    上述判断中,有&>表示的就是不管是什么,都重定向到/dev/null中。


    二、使用sed加正则表达式

    思路:删除一个字符串中的所有数字,看字符串的长度是否为0,如果不为0,则不是整数。

    if [ -n "`echo char | sed 's/[0-9]//g'`" ]  

    then

    echo "char"

    else

    echo "number"

    fi

    三、用变量的子串替换

    思路:如果num的长度不为0,并且把num中的非数字部分删除,然后看结果是不是等于num本身,如果两者成立,那么就是数字,反之亦然。

    if [ -n "$num" -a "$num" = "${num//[^0-9]/}" ]

    then

    echo "char"

    else

    echo "number"

    fi



    展开全文
  • [Java解惑]字符串

    2015-01-29 00:03:00
    字符串... 13 19. char类型相加... 13 20. 程序中的Unicode转义字符... 14 21. 注释中的Unicode转义字符... 14 22. Windows与Linux上的行结束标示符... 14 23. 输出0-255之间的ISO8859-1符... 14 24. String的...
  • Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款...
  • Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式...
  • Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式...
  • 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操作了): 一、思路: 在操作大数前,一定会有一些异常判断,比如输入的字符串是否合法(是否是纯数字?是否为空?等等),然后才是具体...
  • linux运算符

    2017-04-26 21:23:23
    Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符关系运算符布尔运算符字符串运算符文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,...
  • n file.sh以调试模式执行脚本bash -x file.shshell中定义全局变量export DATE=`date +%Y%M%D`shell中交互式输入read-t:设置超时时间-p:指定提示信息shell中进行算术运算符A=3B=4如果使用C=$A+$B表示字符串相加,...
  • Linux Shell 运算符

    2019-10-08 01:12:30
    字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加...
  • Linux随笔3

    2018-05-10 23:06:18
    Shell 基本运算符 Shell包括算数、关系、布尔、字符串、文件检测运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能...
  • linux shell教程(二)

    2015-05-26 18:12:40
    9.Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等 Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是...
  • Linux阶段总结shell脚本

    2018-05-27 18:02:06
    参与的运算必须要符合类型要求(字符串不能和数值相加等); 调用未声明变量会报错 弱类型:定义变量无需指定类型; 默认为字符型参与运算时会自动进行类型转换; 变量无需事先定义也可调用(空) 解释器: ...
  • Linux Shell基本运算符

    2017-07-05 11:38:42
    字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加(注意...
  • [linux] shell 运算符

    2019-09-26 15:59:33
    字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加: val=...
  • 字符串运算符 文件运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加(注意使.....
  • Linux学习笔记(7)

    2020-05-28 00:20:17
    字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加...
  • linux-shell编程(二)

    2019-01-08 13:26:51
    字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用 expr 是一款表达式计算工具,使用它能完成表达式的求值操作 例如,两个数相加(注意...
  • 在Shell中变量的数据类型默认是字符串,是不支持数字运算的。下面这个例子想让a和b两个变量的值相加,可是运行结果发现两个变量的值并没有做相加,仅仅作为文本给打印了出来。[root@iZ25aj1q2ovZ ~]# a=10[root@iZ25...
  • Linux下用C开发PHP扩展

    千次阅读 2010-03-22 11:57:00
    一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13#> cd /software/php-5.2.13/ext 二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复...
  • 1.shell参数传递 ...算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符 expr是一款表达式计算工具,使用它能完成表达式的求值操作。 例:两数相加(注意:使用的数反引号``,不是单...
  • Shell 基本运算符Shell 和其他编程语言一样,支持多种运算符,包括:算数运算符关系运算符布尔运算符字符串运算符文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr...
  • Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

linux字符串相加

linux 订阅