Expansión de la estructura de datos (C ++) operación de calculadora de números complejos

Expansión de la estructura de datos (C ++) operación de calculadora de números complejos

  1. La calculadora de números complejos es un problema típico con el que se encontrarán casi todos los estudiantes de C ++, pero la mayoría de las soluciones de problemas son ingresar y almacenar las partes reales e imaginarias por separado cuando se trata de ingresar números complejos, lo cual es bastante fácil para usted. Sí, pero para los usuarios es más limitado y rígido. Para darse cuenta, la entrada se puede ingresar en la forma general de números complejos (es decir (-a, a, ai, a-bi, a + bi, a + i, -i, i) de entrada de formulario, donde a, b son números de punto flotante) , Y las siguientes sobrecargas se realizan en >>.
  2. La idea general es guardar el contenido de entrada en una matriz de caracteres con un espacio más grande y luego reconocerlo.
  3. (Se ha definido una clase de número complejo, ayb son las partes real e imaginaria de un número complejo respectivamente) El reconocimiento se divide en dos partes, una es reconocer el número complejo solo con la parte real, y la otra es reconocer el número complejo con la parte imaginaria (incluyendo solo la parte imaginaria). La parte, la parte real y la parte imaginaria están disponibles) leídas de izquierda a derecha, con +, -, iy sin signos como signos de identificación.
  4. Para la parte digital, la parte entera se acumula de izquierda a derecha y la parte decimal se acumula de derecha a izquierda. Utilice el punto decimal "." Como marca.
  5. Debido a la variedad de formas de entrada, el código debe modificarse gradualmente de acuerdo con la situación de salida.
  6. No hay reconocimiento de entrada incorrecta y advertencias correspondientes, puede agregarlo usted mismo si lo necesita.
istream& operator >>(istream& is, Complex1& x)//输入任意形式的复数(-a,a,a-i,a-bi,a+bi,a+i,-i,i)
{
    
    
	char m[100];
	is >> m;
	int a = strlen(m);
	float n = 0;int  flag = 1, j = 0, k;
	if (m[a - 1] != 'i')//当复数只有实部,复数的形式为(a,-a)
	{
    
       
		if (m[0] == '-')
		{
    
    
			flag = -1;
			j++;
		}
		else
		{
    
    
			flag = 1;
		}
		while ((m[j] >= '0' && m[j] <= '9') || m[j] == '.')//小数部分取值计算
		{
    
    
			int l;float o = 0;
			
			if (m[j] == '.')
			{
    
    
				for (l = j; m[l] != '\0'; l++)
			{
    
    
			}
				for (j = l-1; m[j] != '.'; j--)
				{
    
    
					o = o * 0.1 + m[j] - '0';
				}
				o = o * 0.1;
				n = o + n;
				j = l ;
				break;
			}
			if (o == 0)
			{
    
    
				n = n * 10 + m[j] - '0';
				j++;
			}
		}
		x.a = n*flag;
		return is;
	}
	else
	{
    
       
		for (j = 0; j < a;j++)
		{
    
    
			if (n != 0 && (m[j] == '-' || m[j] == '+'))
			{
    
    
				x.a = flag * n;
				n = 0;
			}
			if (m[j] == '-')
			{
    
    
				flag = -1;
				j++;
			}
			else if (m[j] == '+')
			{
    
    
				if (m[j] != 'i')
				{
    
    
					flag = 1;
					j++;
				}
			}
			else
			{
    
       
				if (m[j] != 'i')
				{
    
    
					flag = 1;
				}
			}
			if (m[j] == 'i')
			{
    
       
				if (n == 0)
					x.b = flag;
				else
					x.b = flag * n;
				break;
			}
			while ((m[j] >= '0' && m[j] <= '9') || m[j] == '.')
			{
    
    
				int l; float o = 0;
				for (l = j; m[l] != '-' && m[l] != '+'&&m[l]!='i'; l++)
				{
    
    
				}
				if (m[j] == '.')
				{
    
    
					for (j = l-1; m[j] != '.'; j--)
					{
    
    
						o = o * 0.1 + m[j] - '0';
					}
					o = o * 0.1;
					n = o + n;
					j = l ;
					break;
				}
				n = n * 10 + m[j] - '0';
				j++;
			}
			--j;
		}
	}
}

Esta es la primera vez que escribo un blog, por favor avíseme si hay alguna deficiencia.
Materiales de referencia: (solo para darse cuenta del reconocimiento de la forma plural de a ± bi)
C ++ diseño curricular calculadora de números complejos

Supongo que te gusta

Origin blog.csdn.net/yhx99/article/details/108692876
Recomendado
Clasificación