标签归档:数字

字符串转数字(C语言)

字符串转数字

c语言的字符串转数字函数: atoi() 将字符串转化为整形, atol() 将字符串转化为长整形, atol() 将字符串转化为双精度浮点数。所有这些函数定义在 头文件中,下面是自定义实现代码

字符串转化为数字(C代码实现)

#include <stdio.h>

int strtoi(const char *nptr);
long strtol(const char *nptr);
double strtof(const char *nptr);

int main(void)
{
	char chi[128];
	char chl[128];
	char chf[128];

	puts("please enter thress numbers");
	printf("please enter a integer string: ");
	scanf("%s", chi);
	printf("please enter a long string: ");
	scanf("%s", chl);
	printf("please enter a float real string: ");
	scanf("%s", chf);

	printf("the integer \"%s\" is %d\n", chi, strtoi(chi));
	printf("the long \"%s\" is %ld\n", chl, strtol(chl));
	printf("the real \"%s\" is %f\n", chf, strtof(chf));

	return 0;
}

int strtoi(const char *nptr)
{
	int result = 0;
	int signal = 1;

	if ((*nptr >= '0' && *nptr <= '9') || *nptr == '-' || *nptr == '+') {
		if (*nptr == '+' || *nptr == '-') {
			if (*nptr == '-')
				signal = -1;
			nptr++;
		}
	} else {
		return 0;

	}

	while (*nptr >= '0' && *nptr <= '9')
		result = result * 10 + (*nptr++ - '0');

	return result * signal;
}

long strtol(const char *nptr)
{
	long result = 0;
	int signal = 1;

	if ((*nptr >= '0' && *nptr <= '9') || *nptr == '-' || *nptr == '+') {
		if (*nptr == '-' || *nptr == '+') {
			if (*nptr == '-')
				signal = -1;
			nptr++;
		}
	} else {
		return 0;
	}

	while (*nptr >= '0' && *nptr <= '9')
		result = 10 * result + (*nptr++ - '0');

	return result * signal;
}

double strtof(const char *nptr)
{
	long pos = 0;
	double val = 1.0;
	double dec = 0.0;
	int signal = 1;

	if ((*nptr >= '0' && *nptr <= '9') || *nptr == '-' || *nptr == '+') {
		if (*nptr == '-' || *nptr == '+') {
			if (*nptr == '-')
				signal = -1;
			nptr++;
		}
	} else {
		return 0.0;
	}

	while (*nptr >= '0' && *nptr <= '9')
		pos = 10 * pos + (*nptr++ - '0');

	if (*nptr == '.')
		nptr++;
	else
		dec = 0.0;

	while (*nptr >= '0' &&  *nptr <= '9') {
		val /= 10.0;
		dec += val * (*nptr - '0');
		nptr++;
	}

	return signal * (pos + dec);
}

删除字符串中的数字(C语言)

删除字符串中的数字函数

要点:一个遍历每一个字符, 另一个遍历非数字,然后将一次将非数字字符依次进行赋值

看代码更简单

#include <stdio.h>

void del_digit(char str[]);

int main(void)
{
        char str[128];

        printf("please enter a string:  ");
        scanf("%s", str);

        del_digit(str);

        printf("the delete digit string: %s\n", str);

        return 0;
}

void del_digit(char str[])
{
        int i = 0;
        int j = 0;

        while (str[i])
                if (str[i] >= '0' && str[i] <= '9')
                        i++;
                else
                        str[j++] = str[i++];

        str[j] = '\0';

        return;
}

数值字符串判断函数(C语言)

用于判断输入的字符串是否是数值字符串

通常对于输入的字符串常常需要判断是否是数值, 以便可以作为数字输入

判断条件:

  1. 字符串有数字, ‘+’, ‘-‘ 组成
  2. ‘+’, ‘-‘ 只能出现在首个字符位置上
  3. 当首字符符合条件2时, 后面不能为’.’
  4. ‘+’, ‘-‘, 不能同时出现, 且他们每个字符最多出现一次

输入条件:

输入为连续字符, 中间没有空格

输出结果:

根据判断条件判断输入的字符串是否符合判定条件, 符合输入 true, 否则输出 false

源代码:

bool check(char str[]) {
	if (str[0] == '+') {
		if (str[1] == '.')
			return false;
		else {
			int i = 1;
			int cnt = 0;
			while (str[i] != '\0') {
				if (str[i] == '.') {
					cnt++;
				} else if (str[i] < '0' || str[i] > '9') {
					return false;
				}
				i++;
			}
			if (cnt > 1) {
				return false;
			}
		}
	} else if (str[0] == '-') {
		if (str[1] == '.')
			return false;
		else {
			int i = 1;
			int cnt = 0;
			while (str[i] != '\0') {
				if (str[i] == '.') {
					cnt++;
				} else if (str[i] < '0' || str[i] > '9') {
					return false;
				}
				i++;
			}
			if (cnt > 1) {
				return false;
			}
		}
	} else {
		int i = 0;
		int cnt = 0;
		while (str[i] != '\0') {
			if (str[i] == '.') {
				cnt++;
			} else if (str[i] < '0' || str[i] > '9') {
				return false;
			}
			i++;
		}
		if (cnt > 1) {
			return false;
		}
	}
	
	return true;
}