posts - 43,comments - 3,trackbacks - 0
vi/vim 中可以使用 :s 命令来替换字符串,例如:

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:2,$s/vivian/sky/g 替换第 2 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5. 删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d "^V^M" > newfile;

· 使用命令:sed -e "s/^V^M//" filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M$//g

如果上述方法无用,则正确的解决办法是:

· tr -d "\r" < src >dest

· tr -d "\015" dest

· strings A>B

6. 其它

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
posted @ 2012-11-14 21:50 RUI 阅读(244) | 评论 (0)编辑 收藏
1.禁止ci无用的代码、资源、注释到svn中,保持代码库整洁。(这一点非常重要,此类ci在项目后期会使团队付出巨大的代价,成为产品维护、项目重构的重大阻力)

2.确保做到每次ci涉及的物理修改不超过一个逻辑功能点

3.做某个明确的功能点时,确保完成100%的工作,并以此做工作量评估, 设计时适当考虑扩展性,禁止在代码中采用“取巧手段”完成 可预见的、确定需求的 90%,剩余的10%将极大降低团队中其他成员的工作效率。
posted @ 2011-07-26 00:34 RUI 阅读(162) | 评论 (0)编辑 收藏
 1//以步长为4求字符串长度
 2//由于此程序段涉及到了对地址的解引用,所以必须确保包含'\0'的四字节内存属性标记至少包含可读
 3size_t strlen(const char *str)  
 4{  
 5    unsigned v;  
 6    const char *= str;  
 7    while(*&& ((unsigned)p & 3))  
 8        p ++;  
 9    if (*== 0)  
10        return (size_t)(p - str);  
11    //每次递增4,直到找到包含'\0'的那四个字节
12    for (v = 0!v; p += 4)  
13    {  
14        v = (*(unsigned*)p - 0x01010101& 0x80808080;  
15        if (v)  
16            v &= ~*(unsigned*)p;  
17    }
  
18    //计算包含'\0'的那个四个字节中'\0'前有几个字符
19    for (; (v & 0xff== 0; p ++)  
20        v >>= 8;  
21    return (size_t)(p - str - 4); //    去除掉最后一个'p+=4'
22}
 
23
posted @ 2011-03-14 00:07 RUI 阅读(280) | 评论 (0)编辑 收藏
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2744

比如:输入字符串aba,其一维子串a,b,a都是对称串,它本身也是对称的,所以其输出为4。
不难看出所有对称串可以分为3类:
I)单个字符组成的对称串,比如a,b,c
II)偶数长度的对称串,比如aa,abba
III)奇数长度的对称串,即:除中间位置的字符可以出现奇数次,两边的字符必须成对出现,比如aca,abcba

其实情况I)是情况III)的特殊形式,由于我们可以直接获得输入串的长度,故把情况I)单独拿出来就不必计算了
 1#include "stdio.h"
 2#include "stdlib.h"
 3#include "string.h"
 4#include "iostream"
 5
 6using namespace std;
 7#if 0
 8typedef unsigned __int64 uint64;
 9#else 
10typedef unsigned long long uint64;
11
12#endif
13char buf[5001];
14
15uint64 cnt()
16{
17    uint64 ret = 0;
18    size_t len = strlen(buf);
19    ret += len;
20
21    for (int i = 0; i <len-1++i)
22    {
23        int j = i + 1;
24        int k = i;
25        while (k >=0 && j <= len-1 && buf[k] == buf[j])
26        {
27            ++ret;
28            --k,++j;
29        }

30    }

31
32    for (int i = 1; i <len-1++i)
33    {
34        int j = i + 1
35            k = i - 1;
36        while (k >=0 && j <= len-1 && buf[k] == buf[j])
37        {
38            ++ret;
39            --k,++j;
40        }

41    }

42    return ret;
43}

44
45int main()
46{
47
48    while (cin >> buf)
49    {
50        cout << cnt() << endl;
51    }

52    return 0;
53}
posted @ 2010-05-10 11:02 RUI 阅读(555) | 评论 (0)编辑 收藏
 1#include "stdio.h"
 2#include "stdlib.h"
 3
 4typedef
 5struct Node
 6{
 7int data;
 8Node* next;
 9}
Node;
10
11
12Node* reverse_list(Node* header)
13{
14    Node *p, *q, *r;
15    p = q = r = 0;
16
17    q = header;
18    if(q)
19    {
20        r = q->next;
21    }

22
23    while (q)
24    {
25        q->next = p;
26        p = q;
27        q = r;
28        r = r?r->next:0;
29    }

30    return p;
31}

32
33void reverse_print(Node* header)
34{
35    if (header)
36    {
37        reverse_print(header->next);
38        printf("%d\n",header->data);
39    }

40}

41
42int main()
43{
44    Node n1, n2,n3;
45    n1.data = 1;
46    n1.next = &n2;
47
48    n2.data = 2;
49    n2.next = &n3;
50
51    n3.data = 3;
52    n3.next = 0;
53
54    reverse_print(&n1);
55    printf("================\n");
56    reverse_print(reverse_list(&n1));
57    return 0;
58}
posted @ 2010-05-10 10:39 RUI 阅读(321) | 评论 (0)编辑 收藏
     摘要: Sending   Data   with   Messages     In   this   section,   we'll   examine   how   the   system   transfers   data   between...  阅读全文
posted @ 2010-05-08 23:30 RUI 阅读(2358) | 评论 (0)编辑 收藏
#include "stdio.h"
#include 
"stdlib.h"


typedef __int64 int64;

template
<typename T>
void tran(char dest[], int len, int maxL, T src)
{
    
if (len + 1 > maxL)
        
return ;

    
int r = 0;
    
if (src < 0)
    
{
        dest[r
++= '-';
        src 
= -src;
    }

    
//src >=0;
    T diff = src - (int64)src;

    int64 iSrc 
= (int64)src;
    int64 mod 
= 1;
    
while (iSrc >= 10)
    
{
        iSrc 
/= 10;
        mod 
*= 10;
    }


     iSrc 
= (int64)src;

    
bool bDot = false;
    
while ( r < len)
    
{
        
char c = '0';
        c 
+= iSrc /mod % 10;
        dest[r
++= c;

        
if (mod == 1)
        
{
            
if (diff > 0
            
{
                
if (!bDot)
                
{
                    dest[r
++= '.';
                    bDot 
= !bDot;
                }

                diff 
*= 10;
                iSrc 
= (__int64)diff;
                diff 
-= iSrc;
            }

            
else
            
{
                
if (!bDot)
                
{
                    dest[r
++= '.';
                    bDot 
= !bDot;
                }


                iSrc 
= 0;
            }

        }

        
else
        
{
            mod 
/= 10;
        }

    }

    dest[r] 
= 0;
}


int main()
{
    
double a = -0.54360;
    
char dest[1000];
    tran(dest, 
20999, a);
    printf(
"%s\n", dest);
    
return 0;
}
posted @ 2010-05-07 16:58 RUI 阅读(401) | 评论 (0)编辑 收藏

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int cnt[10] = {1};

void count(int n)

{

while (n)

{

cnt[n%10]++;

n = n /10;

}

}

 

/**

num >= 0 && num <= 9;

*/

int count2(int src, int num)

{

char str[100] = {0};

char tmpstr[100] = {0};

sprintf(str,"%d", src);

int len = strlen(str);

int ret = len-1;

int tmp = len - 2;

while (tmp >= 1)

{

ret *= 10;

tmp--;

}

if (!num)

{

int total = 10;

if ( len < 2)

{

total = 0;

}

tmp = 9;

for ( int k = 3; k <= len; ++k)

{

tmp *= 10;

total += tmp * (k-1);

}

if (total)

{

ret = total - 9 * ret;

}

}

int t = 0;

int t0, t1;

for (int i = 0; i < len; ++i)

{

t0 = 0;

t1 = 0;

t = 1;

for (int k = 0; k < i; ++k)

{

t0 = t0*10 + str[k]-'0';

t *= 10;

}

t /= 10;

t0 -= t;

t0 += 1;

t = 0;

for (int k = i +1; k < len; ++k)

t1 = t1*10 + str[k]-'0';

t1 += 1;

if (str[i]-'0'>num)

{

if (!i && !num && len > 1) t0 = 0;

t1 = 0;

}

else if (str[i]-'0'==num)

{

t0--;

}

else

{

t0--;

t1 = 0;

}

 

for (int k = i+1; k < len; ++k)

t0 *= 10;

 

ret += t0 + t1;

}

return ret;

}

int main()

{

 

int o_o = 1;

while (o_o <= 10000)

{

memset(cnt, 0 , sizeof cnt);

cnt[0] = 1;

for (int i =0 ;i <= o_o; ++i)

count(i);

for ( int i = 0; i <= 9; ++i)

{

int n1 = cnt[i];

int n2 = count2(o_o, i);

if (n1- n2)

{

printf(" o_o = %d , a[%d] = %d, %d\n",o_o, i, n1,n2 );

goto _exit;

}

}

 

++o_o;

}

_exit:;

return 0;

}

posted @ 2010-05-06 17:24 RUI 阅读(294) | 评论 (0)编辑 收藏

 


#include 
"stdafx.h"
#include 
<iostream>
#include 
"windows.h"


#include 
"stdio.h"
#include 
"stdlib.h"
#include 
"signal.h"
#include 
"process.h"
#include 
"malloc.h"

#include 
"fstream"
#include 
"list"
#include 
"vector"
#include 
"algorithm"
#include 
"time.h"

#include 
"queue"
#include 
"stack"

using namespace std;

typedef 
struct TNode
{
    TNode 
*left, *right;
    
int data;
    TNode(
int d){
        left 
= right = NULL;
        data 
= d;
    }

}
 TNode;

void inorderTrave(TNode* root)
{
    stack
<TNode*> st;
    st.push(root);
    TNode 
*= 0;

    
while (!st.empty())
    
{
        
while(st.top())st.push(st.top()->left);
        st.pop();
        
if (!st.empty())
        
{
            p 
= st.top();
            st.pop();
            printf(
"%d, ", p->data);
            st.push(p
->right);
        }

    }

}


void preTrave(TNode* root)
{
    stack
<TNode*> st;

    
while (root || !st.empty())
    
{
        
while(root)
        
{
            printf(
"%d, ", root->data);
            
if (root->right) st.push(root->right);
            root 
= root->left;
        }

        
if (!st.empty())
        
{
            root 
= st.top();
            st.pop();
        }

    }

}


void postTrave(TNode* root)
{
    stack
<TNode*> st;
    stack
<int> stF;

    
while (root || !st.empty())
    
{
        
while (root)
        
{
            st.push(root);
            stF.push(
0);
            root 
= root->left;
        }


        root 
= st.top();
        
int f = stF.top();
        st.pop();stF.pop();

        
if (f == 0)
        
{
            st.push(root);
            stF.push(
1);
            
{
                root 
= root->right;
            }

        }

        
else if (f == 1)
        
{
            printf(
"%d, ", root->data);
            root 
= 0;
        }

    }

}



int main()
{
    TNode 
*= new TNode(1);

    TNode 
*r1 = new TNode(2);
    TNode 
*r2 = new TNode(3);


    TNode 
*r12 = new TNode(4);
    TNode 
*r21 = new TNode(5);

    r
->left = r1;
    r
->right = r2;
    r1
->right = r12;
    r2
->left= r21;
    preTrave(r);
    printf(
"\n");
    inorderTrave(r);
    printf(
"\n");
    postTrave(r);
    
return 0;
}



posted @ 2010-04-28 23:54 RUI 阅读(237) | 评论 (0)编辑 收藏

void swap(int& a, int& b)
{
 int c = a;
 a = b;
 b = c;
}

int partion(int a[], int p, int r)
{

 double pp = rand()/double(RAND_MAX);

 int randpos = (int)((r-p) * pp) + p;


 swap(a[p], a[randpos]);

 int x = a[p];
 int i=0, j =0;
 i = p, j = r +1;
 while(1)
 {
  while (i <r &&a[++i] < x);
  while (a[--j] > x);
  if (i >= j)
  {
   break;
  }
  swap(a[i],a[j]);
 }
 a[p] = a[j];
 a[j] = x;
 return j;
}

 

int main()
{

 int a[] = {7,6,5,1};
 int pos = 0;
 int K = 9994;
 int st = 0;
 int ed = sizeof (a) /sizeof(a[0]) - 1;
 while (K)
 {
  pos = partion(a, st, ed);
  if (ed - pos +1 <= K)
  {
   K -= ed-pos + 1;
   for (int j = pos; j <= ed; ++j)
    cout << a[j] << endl;
   ed = pos - 1;
  }
  else
  {
   st = pos+1;
  }
  if (st > ed)
  {
   cout << "error " << endl;
   return 1;
  }
 }

 return 0;
}

posted @ 2010-04-28 23:09 RUI 阅读(418) | 评论 (0)编辑 收藏
仅列出标题  下一页