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 为 skyn 为数字,若 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 为 sky2. :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 为 sky4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符: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>B6. 其它利用 :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 阅读(257) |
评论 (0) |
编辑 收藏
1.禁止ci无用的代码、资源、注释到svn中,保持代码库整洁。(这一点非常重要,此类ci在项目后期会使团队付出巨大的代价,成为产品维护、项目重构的重大阻力)
2.确保做到每次ci涉及的物理修改不超过一个逻辑功能点
3.做某个明确的功能点时,确保完成100%的工作,并以此做工作量评估, 设计时适当考虑扩展性,禁止在代码中采用“取巧手段”完成 可预见的、确定需求的 90%,剩余的10%将极大降低团队中其他成员的工作效率。
posted @
2011-07-26 00:34 RUI 阅读(173) |
评论 (0) |
编辑 收藏
1//以步长为4求字符串长度
2//由于此程序段涉及到了对地址的解引用,所以必须确保包含'\0'的四字节内存属性标记至少包含可读
3size_t strlen(const char *str)
4{
5 unsigned v;
6 const char *p = str;
7 while(*p && ((unsigned)p & 3))
8 p ++;
9 if (*p == 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 阅读(293) |
评论 (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 阅读(572) |
评论 (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 阅读(342) |
评论 (0) |
编辑 收藏
摘要: Sending Data with Messages In this section, we'll examine how the system transfers data between...
阅读全文
posted @
2010-05-08 23:30 RUI 阅读(2451) |
评论 (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, 20, 999, a);
printf("%s\n", dest);
return 0;
}
posted @
2010-05-07 16:58 RUI 阅读(408) |
评论 (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 阅读(311) |
评论 (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 *p = 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 *r = 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 阅读(252) |
评论 (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 阅读(445) |
评论 (0) |
编辑 收藏