回复 34楼 烟雾中的迷茫
自己多弄点数测试一下嘛,长的、短的,必须都能适用,负数也要考虑。
授人以渔,不授人以鱼。
#include "stdafx.h" #include <stdio.h> #include <string.h> char* TransForm(char* p, int iVar); void main(void) { char cString[1024]; printf("%s\n", TransForm(cString, 1234567)); printf("%s\n", TransForm(cString, 0)); printf("%s\n", TransForm(cString, -1234567)); } char* TransForm(char* p, int iVar) { int iIndex; // 循环计数器 int iCount; // 千位计数器 bool lNegative; // 是否负数的标志 char* pBuffer = p; // 记录缓冲区的起始地址(p是动指针, pBuffer是不动的, 用于返回) if (iVar == 0) { // 如果传入的数值为0直接返回"0" *p++ = '0'; *p = '\0'; return pBuffer; } lNegative = (iVar < 0); if (lNegative) { iVar = -iVar; // 取正数计算 } iIndex = 1; iCount = 0; while (iVar > 0) { if (iCount < 3) { iCount++; } else { *p++ = ','; iCount = 1; } *p++ = '0' + iVar % 10; iVar = iVar / 10; iIndex++; } if (lNegative) // 补回负数的标识 { *p++ = '-'; } *p = '\0'; // 字符串结束符 return _strrev(pBuffer); // 反转缓冲区之后返回 } // 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为0时失败.
#include "stdafx.h" #include <stdio.h> #include <string.h> char* TransForm(char cBuffer[], int iVar); void main(void) { char cString[1024]; // Hello,world!的翻版 // 原先是这样写的 // char cString[] = "Hello,world!"; // printf("%s\n", cString); // 套上面的格式, 成下面这样 printf("%s\n", TransForm(cString, 1234567)); printf("%s\n", TransForm(cString, 0)); printf("%s\n", TransForm(cString, -1234567)); // 这种套换方式, 是程序语言的基本用法 // 注意与下面变换对比: // printf("%d\n", 1234567); // 这样就可以猜到printf()内部的动作了 // 如果要回避printf(), 可以 // puts(TransForm(cString, 1234567)); // 不妨比较前后两种版本(printf()版和puts()版)EXE文件的大小 } char* TransForm(char cBuffer[], int iVar) { int iIndex; // 循环计数器 int iCount; // 千位计数器 bool lNegative; // 是否负数的标志 char* p = cBuffer; // 记录缓冲区的起始地址(p是动指针, cBuffer是不动的, 用于返回) if (iVar == 0) { // 如果传入的数值为0直接返回"0" *p++ = '0'; *p = '\0'; return cBuffer; } lNegative = (iVar < 0); if (lNegative) { iVar = -iVar; // 取正数计算 } iIndex = 1; iCount = 0; while (iVar > 0) { if (iCount < 3) { iCount++; } else { *p++ = ','; iCount = 1; } *p++ = '0' + (iVar % 10); iVar /= 10; iIndex++; } if (lNegative) // 补回负数的标识 { *p++ = '-'; } *p = '\0'; // 字符串结束符 return _strrev(cBuffer); // 反转缓冲区之后返回 } // 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为0时失败.