1、判断一个字符串是否是回文,例如“level”;
解析:
根据题目要求,可以从单词两端进行遍历比较。
(1)计算要比较的单词字符串长度,如level长度是5,则需要比较两次。
(2)第一次比较,看第一个和最后一个字符是否相同,
(3)第二次比较,第二个符和倒数第二个字符比较是否相同。
代码如下:
.cpp 文件
#include <iostream>
using namepace std;
void recv(char *str)
{
int len = 0;
found = 0;
if(str = NULL)
{
return 0;
}
len = strlen(str);
for(int i = 0; i < len/2; i++)
{
if(*str(i) != *str(len - i))
{
found = 0;
break;
}
}
return found;
}
void main()
{
char str1{5} = {"12321"};
char str2[7] = { "1234321" };
int test1 = recv(str1);
int test2 = recv(str2);
cout << "str1 is" << ("test1 == 1 ? " " : "not"") << "reserve string ." << endl;
cout << "str2 is" << ("test2 == 1 ? " " : "not"") << "reserve string ." <<endl;
reurn 0;
}
2.编程实现strcmp 库函数。
解析:此题实际考察对两个字符串str1和str2的比较,若相等则返回1,,否则返回0;
代码如下:
#include <iostream>
using namespace std;
void strcmp0(char *str1, char *str2)
{
int size = 0;
found = 0;
len1 = strlen(str1);
len2 = strlen(str2);
if(len1 != len2)
{
return 0;
}else {
for(int i = 0; i < len1; i++ )
{
if(*str1(i) == *str2(i))
{
return 1;
}
else{
return 0;
break;
}
}
}
}
void main()
{
char str1{5} = {"12321"};
char str2[7] = { "1234321" };
int test = strcmp0(str1,str2);
cout << " " << endl;
}
解析2:实际考察对两个字符串str1和str2的比较,若相等则返回:0,,str1大于str2,返回1,否则返回-1;
代码如下:
#include <iostream>
using namespace std;
int stcmp0(const char *src,const char *dst)
{
int ret = 0;
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst )&& *dst ))
{
++src;
++dst;
}
if(ret < 0)
{
ret = -1;
}else if(ret > 0)
{
ret = 1;
}
return(ret);
}
int main()
{
char str1[10] = "1234567";
char str2[10] = "1234567";
char str3[10] = "12345678";
char str4[10] = "1234566";
int test1 = strcmp0(str1, str2);
int tets2 = strcmp0(str1, str3);
int test3 = strcmp0(str1, str4);
cout << " test1 = " << test1 << endl;
cout << " test2 = " << test2 << endl;
cout << " test3 = " << test3 << endl;
}
3、编程查找两个字符串的最大公共字符子串
解析:考点,字符串相关综合编程能力
代码如下:
#include <iostream>
using namespace std;
void strcmp0(char *str1, char *str2)
{
int i , j;
char *shortstr, *longstr;
char *substr;
//判断有效性
if(NULL != str1 && NULL != str2)
{
return NULL;
}
//判断谁长谁短
if(strlen(str1) <= strlen(str2))
{
shorter = str1;
longstr = str2;
}else
{
shortstr = str2;
longstr = str1;
}
//如果在长字符串中能找到短的字符串,则直接返回短字符串
if(strstr(longstr, shortstr) ! = NULL)
{
return shortstr;
}
//申请堆内存返回结果
substr = (char *)malloc(sizeof(char) * (strlen(shortstr) + 1));
for(i = strlen(shortstr) - 1; i > 0; i--)
{
for(j = 0; j <=strlen(shortstr) -i; j++)
{
//将端字符串一部分复制到substr
memcpy(substr, &shprtstr[j], i);
//其长度逐渐减少
substr[i] = '\0';
//如果在longstr找到substr,则返回substr
if(strstr(longstr,substr) != NULL)
return substr;
}
}
return NULL;
}
void main()
{
char *str1 = (char *)malloc(256);
char *str2 = (char *)malloc(256);
char *common = NULL;
gets(str1);
gets(str2);
common = commonstring(str2, str1);
printf << ("the longgest common string is:%s\n ", common);
}