字符串专题之 leetcode 537. 复数乘法

题目:
给定两个表示复数的字符串。

返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。

示例 1:
输入: “1+1i”, “1+1i”
输出: “0+2i”
解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
示例 2:

输入: “1±1i”, “1±1i”
输出: “0±2i”
解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0±2i 的形式。
注意:

输入字符串不包含额外的空格。
输入字符串将以 a+bi 的形式给出,其中整数 a 和 b 的范围均在 [-100, 100] 之间。输出也应当符合这种形式。

解题思路
思路很简单,就是将int和虚数的序号分别取出来,然后相乘拼接就可以了。
但是实际写的过程中,strtok这个接口让我想了好久,终于搞清楚了。
PS:
1.使用strtok进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的str已经不一样了。
第一次分割之后,原字符串str变成分割完成之后的第一个字符串,且一直为该值;
2.在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回指向被分割出片段的指针。
3.当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。

#define MAX_LEN 20
int getImagNum(char *a, char *tmp)
{
    char *res = NULL;
    printf("%s %s, %d,%d\n", a, tmp, strlen(a), strlen(tmp));
    res = strtok(tmp + strlen(tmp) + 1, "i");//这个位置因为+/-这个位置已经成了\0("1\01i"),故偏移一位后会到达"1i";
    printf("%s \n", res);
    if (res == NULL) {
        printf("111 \n");
        return 0;
    }
    return atoi(res);
}

char * complexNumberMultiply(char * a, char * b)
{
    char charAdd[2] = "+";
    char charSub[2] = "-";

    char *res = malloc(sizeof(char) * MAX_LEN);
    int aInt, bInt, aImagNum, bImagNum, Int, ImagNum;
    char *tmp = NULL;

    tmp = NULL == strtok(a, charAdd)? strtok(a, charSub): strtok(a, charAdd);
    //字符串转数字
    aInt = atoi(tmp);
    aImagNum = getImagNum(a, tmp);

    tmp = NULL == strtok(b, charAdd)?strtok(b, charSub):strtok(b, charAdd);
    bInt = atoi(tmp);
    bImagNum = getImagNum(b, tmp);

    Int = aInt * bInt + (-1) * aImagNum * bImagNum;
    ImagNum = aInt * bImagNum + bInt * aImagNum;
    //sprintf拼接
    sprintf(res, "%d+%di",Int, ImagNum);
    //res[strlen - 1] = '\0';

    return res;
}

热门文章

暂无图片
编程学习 ·

3.1.2 Jsoup请求URL

org.jsoup.Jsoup类可以用来处理连接操作。在org.jsoup.Jsoup类中提供了connect(String url)方法来创建一个新连接,该方法的实现依赖于Java网络通信包java.net。在创建连接之后,可通过具体请求方法(GET或POST等)获取URL对应的HTML文件。 如需要采集某页面中的文本内容。首先,…
暂无图片
编程学习 ·

安卓安全那点事

本文旨在对于一个安卓app的安全知识做一个较为泛泛的总结,为开发出更安全的应用提供思路。内容比较粗略,仅起到抛砖引玉的效果,还望大家见谅。Android应用的安全 意义 在维基百科上有一个关于计算机安全的定义: 计算机安全(computer security)是计算机与网络领域的信息安…
暂无图片
编程学习 ·

latex在线编辑公式(可快速查看latex码)

在发表论文时,常常会用到latex进行排版,但是会遇到mathtype转换为latex的问题,这里提供了一个latex在线编辑公式的网址,效果如下: http://latex.codecogs.com/eqneditor/editor.php
暂无图片
编程学习 ·

数据重删和数据压缩主流技术分析

数据压缩随着计算能力的不断提升,当代社会正在产生越来越巨量的数据,数据压缩也被应用在生活的方方面面,如在网上打开的图片、视频、音频等都是经过压缩的。压缩可以分为无损压缩和有损压缩。无损压缩可以通过压缩文件完全恢复原始文件;而有损压缩则会丢失一部分信息。对于…
暂无图片
编程学习 ·

css基础学习记录

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>CSS</title><!--也可在head style标签里--><!--<style type="text/css">--><!--p{--><!--color: bisqu…
暂无图片
编程学习 ·

还是别看学位论文

最近我实验室的一个组在做疫情预测的工作。效果还行,论文也写的差不多了。不过上面的老师说引的文章都太老了,让再加点新的。于是今天下午我就和大家一起看文献。之所以之前引的都比较老,主要是因为传染病预测这块分两派,一派是理论建模派,主要工具就是微分动力模型,一般…
暂无图片
编程学习 ·

linux安装nginx及https化

Linux安装nginx安装操作系统:centos 安装前先确保系统安装了g++、gcc、openssl-devel、pcre-devel和zlib-devel软件yum install gcc-c++ yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel上传nginx安装包nginx-1.13.0.tar.gz至linux指定位置(/usr/loc…
暂无图片
编程学习 ·

深度学习之计算机视觉

在第3章中,使用了名为ResNet的流行的卷积神经网络(Convolutional Neural Network,CNN)架构构建了一个图像分类器,我们将此模型作为黑盒使用。本章将讨论卷积网络的重要组成部分。本章将涵盖如下重要主题:神经网络简介;从零开始构建CNN模型;创建和探索VGG16模型;计算预…
暂无图片
编程学习 ·

自定义控件三部曲之动画篇(三)—— 代码生成alpha、scale、translate、rotate、set及插值器动画

一、概述前两篇,我为大家讲述了利用XML来定义动画及插值器,但在代码中,我们常常是动态生成动画的,所以,这篇将为大家讲述如何用代码生成动态生成动画及插值器。先简单写出各个标签对应的类,方便大家理解:scale —— ScaleAnimationalpha —— AlphaAnimationrotate ——…
暂无图片
编程学习 ·

nat表中的dnat snat的使用(iptables)

nat表中的dnat snat的使用- snatiptables -t nat -A POSTROUTING -o enp6s0 -j SNAT --to-source 172.25.254.33- dnatiptables -t nat -A PREROUTING -i enp6s0 -j DNAT --to-dest 170.25.254.22从enp6s0进来的所有数据都转给170.25.254.11,即给enp6s0(172.25.254.33)的所有…
暂无图片
编程学习 ·

Java字节码增强探秘

1.字节码1.1 什么是字节码?Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,…
暂无图片
编程学习 ·

老鸟给予Java初学者的学习路线的一些建议

java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍。这一部分的内容,同样适用于一…
暂无图片
编程学习 ·

05 | 消息积压了该如何处理?

1.应用场景https://blog.csdn.net/william_n/article/details/1040254082.学习/操作2.1 阅读文档这节课我们来聊一聊关于消息积压的问题。据我了解,在使用消息队列遇到的问题中,消息积压这个问题,应该是最常遇到的问题了,并且,这个问题还不太好解决。我们都知道,消息积压…
暂无图片
编程学习 ·

希尔排序的原理,图解,java代码实现

希尔排序希尔排序就是一种插入排序,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。排序原理排序原理:选定一个增长量h,按照曾长亮h作为分组的依据,对数据进行分组。 对分好组的每一组数据完成插入排序。 减少增长量,最小减为1,重复第二步操作。举例排序过…
暂无图片
编程学习 ·

通过小项目学习23种设计模式(四)

通过读取文件导入数据库功能学习23种设计模式 第一次重构代码 目前代码写的很随性,导致以后业务增加时拓展起来繁杂,所以我们将已有逻辑进行第一重构: 抽取公共的行为生成接口 package com.xiaoma.fileimport.common;/*** 任务主执行类* 使用工厂模式,首先将任务共同行为抽象出…
暂无图片
编程学习 ·

Chen08

[Calendar] 实例化Calendar Calendar c = Calendar.getInstance(); 月份是从0开始计数的(0-11) c.set();//日历设置到某一天 c.get();//日历翻到的那一天BigInteger 表示整数、 BigDecimal表示浮点数 对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类, DecimalForm…
暂无图片
编程学习 ·

Day03 数据类型转换 +墨子

学习python的第三天墨子 墨子,名翟,春秋战国之际的思想家,墨家的创始人。 墨子反对不义之战,广收门徒周游列国,在百家争鸣的战国产生了很大的影响。墨子还是一位高明的工匠,谙熟各种机械工程技艺,为了止楚攻宋,曾与名匠公输般(鲁班)进行攻防演练,使对方折服。他还详…
暂无图片
编程学习 ·

前端性能优化

浏览器渲染机制 Html解析成DOM树,Css解析成CSS树,将DOM树与CSSDOM规则树合并在一起生成Render树,遍历渲染树开始布局,计算每个节点的位置大小信息,将渲染树每个节点绘制到屏幕阻塞渲染当浏览器遇到一个script标记时,DOM构建将暂停,直至脚本完成执行,然后继续构建DOM。每…
暂无图片
编程学习 ·

Java数据结构--循环链表

一、简介 1.1 概念对于单链表而言,最后一个结点的地址为空,如果表示最后一个结点的指针域指向头结点,整个链表形成一个环,就构成了单循环链表。 与单链表相比,只是将原来判断指针是否为空变为判断是否是头指针,没有其他的变化。 访问单循环链表某一结点,可以从任何一个结…
暂无图片
编程学习 ·

Java-WrapperClass及其转化

java里的变量分为primitive type和reference type两种。primitive type是int, char, double啥的,reference type(Wrapper Class)就是Integer, String这些。 我一直对reference type互相转化有点记不住,看了几个视频学习了一下。发现是因为对reference type(Wrapper Class)原理…