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));
}