1.数字转换为字符
2.字符串的翻转
3.字符串的压缩
4.字符串的删除
5.查询子串在母串中出现的次数
6.回文字符串的判断
void IntToString(char arr[], int num)//数字转化字符
{
int i = 0;
while (1)
{
arr[i] = num % 10 + '0';
num = num / 10;
i++;
if (num == 0)
break;
}
arr[i] = '\0';
ConvertString(arr);
}
void ConvertString(char arr[])//字符串的翻转
{
int len = strlen(arr);
int a = 0;
int b = len - 1;
while (a < len / 2)
{
char tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
a++, b--;
}
}
void CompresString(char arr[])//字符串压缩
{
int i = 0;
int j = 1;
while (arr[i] != '\0')
{
if (arr[i] == arr[j])
j++;
else
{
if ((j - i) > 1)//把j-i这个整数转换为字符打印出来
{
char num[10] = { 0 };
IntToString(num, j - i);//将数字转换为字符
int len = strlen(num);
strncpy(&arr[i + 1], num, len);//将数字转换的字符放入统计的字符后面,比如先统计a,将转换的数字放入a后
//放入后,原来的字符会缩短,所以将后面的字符往前移动(j-(i+len+1))个位置
int k = 0;
for (k = j; arr[k] != '\0'; k++)
{
arr[k - j + i + len + 1] = arr[k];
}
arr[k - j + i + len + 1] = '\0';
i = i + len;
j = i + 1;
}
i++;
j = i + 1;
}
}
}
void DeleteString(char arr[])//字符串删除
{
assert(arr);
int i = 0;
int j = 0;
for (i = 0; arr[i] != '\0'; i++)
{
for (j = i + 1; arr[j] != '\0'; j++)
{
if (arr[i] == arr[j])
{
int k = j + 1;
for (; arr[k] != '\0'; k++)
{
arr[k - 1] = arr[k];
}
arr[k - 1] = '\0';
j--;
}
}
}
}
int DemandString(const char arr[],const char des[])//查询子串出现次数
{
assert(arr && des);
int count = 0;
char* src = arr;//母串头指针
while (*src)
{
char* dis = src;//记住母串查询起始位置,方便下一次查询加一
char* pos = des;//子串头指针
if (*pos == *src)
{
while (*pos)
{
pos++, src++;
if (*pos == *src)
continue;
else
break;
}
src = dis;
}
if (*pos == '\0')
count++;
src++;
}
return count;
}
int PalinDromeString(const char arr[])//回文字符串判断
{
assert(arr);
int i = 0;
int len = strlen(arr);
int j = len - 1;
while (i < len / 2)
{
if (arr[i] == arr[j])
{
i++;
j--;
}
else
return -1;
}
if (i <= len / 2)
return 1;
else
return 0;
}
测试用例:
void test()
{
//【1】字符串翻转
printf("【1】字符串翻转>\n");
char arr1[] = "I can fly!";
printf("原字符串>%s\n", arr1);
ConvertString(arr1);
printf("翻转后>%s\n", arr1);
//【2】字符串压缩
printf("【2】字符串压缩>\n");
char arr2[] = "aaaaaaaaaaaaabbbbbbbccccccddddef";
printf("原字符串>%s\n", arr2);
CompresString(arr2);
printf("压缩后>%s\n", arr2);
//【3】字符串删除
printf("【3】字符串删除>\n");
char arr3[] = "They are students";
char arr10[] = "aeiou";
printf("原字符串>%s\n",arr3);
DeleteString(arr3,arr10);
printf("删除后>%s\n", arr3);
//【4】查询子串出现次数
printf("【4】查询子串出现次数>\n");
char arr4[] = "abc cba aabc bca abb cabc";
char des[] = "abc";
printf("原字符串>%s\n", arr4);
printf("子串\"abc\"出现次数>%d\n", DemandString(arr4, des));
//【5】判断回文字符串
printf("【5】判断回文字符串>\n");
char arr5[] = "aaabcbaaa";
printf("原字符串>%s\n", arr5);
printf("回文字符串?>%d\n",PalinDromeString(arr5));
}