Lesson-9.md

January 17, 2013 · View on GitHub

Lesson 9 Convert a number to a string 整型转字符串

#include <stdio.h>

void itoa(int num, char buf[])
{
	int i = 0;
	int j = 0;

	do 
	{
		buf[i++] = num % 10 + '0';
		num /= 10;		
	} while (num);
	buf[i] = '\0';

	for (j = 0, i--; j < i; j++, i--)
	{
		char tmp;
		
		tmp = buf[i];
		buf[i] = buf[j];
		buf[j] = tmp;
	}

	return;
}

int main(void)
{	
	int num;
	char buf[100];

	printf("Please input a number: ");
	scanf("%d", &num);

	itoa(num, buf);

	printf("number string = %s\n", buf);

	return 0;	
}

知识点

  • 数组 array
  • 函数式的宏定义
  • 进制表示 oct, dec, hex
  • 三元表达式 a > b ? a : b
  • 字符串逆序 reverse()
  • 字符串库函数 itoa

课堂讨论

  • do-while 的循环可以用 while 循环替换吗? 为什么?
  • 如果要将输入数字,按照16进制,或者2进制转换成字符串,如何修改?
  • 为了交换两个字节的内容,示例中引入了一个 tmp 变量,这个是必须的吗?
  • 在 itoa 中用到了字符串的逆序操作,请实现一个函数来完成这个操作。

课后练习

  • 用户任意输入一个字符串,判断这个字符串是否为“回文”(回文即按正反顺序读都一样)。例如 “abcba” 就是回文。
  • 使用字符数组实现基于数字字符串的加减法。例如"123" + "45" = "168" , "456"-"13"="443"。
  • 编写一个去字符串多余空格的的程序,将连续的多个空格用一个空格代替。例如输入"abc___ab_a__c",输出"abc ab a c"。