1. 程式人生 > 實用技巧 >字串翻轉操作——leetcode千分位分隔數

字串翻轉操作——leetcode千分位分隔數

方法一:在leetcode編譯通過:

 1 char *reverse(char *s)       //字串翻轉函式
 2 {
 3     int iLength = strlen(s);
 4     int i = 0; 
 5     for(;i<iLength/2;i++)
 6     {
 7     *(s+i) = *(s+i) ^ *(s+iLength-i-1);
 8     *(s+iLength-i-1) = (*(s+iLength-i-1)) ^ (*(s+i));
 9     *(s+i) = *(s+i) ^ *(s+iLength-i-1);
10
} 11 return s; 12 } 13 char * thousandSeparator(int n){ 14 char *s = (char *)malloc(30); 15 memset(s, 0, 30); 16 char *s1=(char *)malloc(30); 17 memset(s, 0, 30); //初始化字串(必須有) 18 sprintf(s1,"%d",n); //整數轉字元 19 int count=0; //記錄原字串個數
20 int i; 21 int index=0; //記錄加入標點號後的陣列個數 22 for(i=strlen(s1)-1;i>=0;--i) 23 { 24 s[index++]=s1[i]; 25 ++count; 26 if(count%3==0&&i) 27 { 28 s[index++]='.'; 29 } 30 } 31 reverse(s); 32 return s; 33 }

方法二:在dev-c++程式中運算通過。

#include<stdio.h>
#include<string.h>
/* 
char *reverse(char *s) 

{
    int iLength = strlen(s);
    int i; 
    for(i=0;i<iLength/2;i++)
    {
    *(s+i) = *(s+i) ^ *(s+iLength-i-1);
    *(s+iLength-i-1) = (*(s+iLength-i-1)) ^ (*(s+i));
    *(s+i) = *(s+i) ^ *(s+iLength-i-1);
    }
    return s;
}
*/ 
 
int main()
{
    int n;
    char s[32],s1[32];
    scanf("%d",&n);
    sprintf(s1,"%d",n);
     int count=0;
     int i;
    int index=0;
    for(i=strlen(s1)-1;i>=0;--i)
    {
        s[index++]=s1[i];
        ++count;
        if(count%3==0&&i)
        {
            s[index++]='.';
        }
    }
    strrev(s);
    puts(s);
    return 0;
}