以下是三个小程序,我需要多多动手,所以也顺便记下以后方便
(1):两个字符串是否包含,程序如下:
/*
这里没有考虑大写、重复的情况,不过稍加修改就能
适应,用了hashtable的方法
*/
#include <iostream>
using namespace std;
bool m_iscontain(char* f_str, char* s_str){
char flag[26] = {0};
while(*f_str != '\0'){
// 相当于hash函数为f(n)=n, 其他情况可以用更复杂的hash函数
flag[*f_str-'a'] = 1;
f_str++;
}
while(*s_str != '\0'){
if(flag[*s_str-'a'] != 1){
return false;
}
s_str++;
}
return true;
}
int main(int argc, char* agrv[])
{
char testStr1[] = "asdfghjkl";
char testStr2[] = "sglaf";
cout << m_iscontain(testStr1, testStr2) << endl;
return 0;
}
(2):字符串转为整数,程序如下:
/*
没有考虑溢出、有字母的字符串,这里只是思想的体现
*/
#include <iostream>
using namespace std;
int m_toint(char* str){
int retV = 0;
while(*str != '\0'){
retV = retV*10 + (*str-'0');
str++;
}
return retV;
}
int main(int argc, char* argv[])
{
char testStr[] = "56856";
cout << m_toint(testStr) << endl;
return 0;
}
(3):字符串的复制,程序如下:
#include <iostream>
#include <assert.h>
using namespace std;
char* m_copy(char* dest, const char* src){
assert((dest != NULL) && (src != NULL));
char* retV = dest;
while((*dest++ = *src++) != '\0') ;
return retV;
}
int main(int argc, char* argv[])
{
char src[] = "568chenyy";
char dest[20];
cout << m_copy(dest, src) << endl;
return 0;
}