版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、压缩字符串
问题描述:
2、删除两句话中重复的单词
问题描述:比如输入my first code! first
输出应该是my code!
参考程序:https://blog.csdn.net/Poppy991122/article/details/80031867
下面的程序还需要改进
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define M 100
int my_strlen(char a[]);
//函数声明
void Find(char a[], char *find, int k);
int my_strlen(char a[])
{
int i, k = 0;
for (i = 0; a[i] != '\0'; i++)
{
k++;
}
return k;
}
void Find(char a[], char *find, int k)
{
int i, j, m, n;
char *p = find;
m = my_strlen(a);
//直至读到'\0'时停止
for (j = 0; a[j] != '\0'; j++)
{
//逐个字符判断是否相同
if (a[j] == *p)
{
//若相同,继续判断下一个字符
p++;
//find和a中的某一字符串同时读取完毕时视为相同
if (*p == NULL&&*(a + j + 1) == ' ' || *(a + j + 1) == NULL)
{
//若所要删除的字符串为该句子最后一个字符串,则如下执行
if ((j + k) > m)
{
//使输出提前中止
a[j - k + 1] = '\0';
}
//若所要删除的字符串不为该句子最后一个字符串
else
{
for (i = j + 1; i < m; i++)
{
//使字符串整体前移
a[i - k - 1] = a[i];
}
a[m - k - 1] = '\0';
j = j - k;
//使指针回位
p = find;
//重新测取字符串长度
m = my_strlen(a);
}
}
}
else
{
//若a中某个单词与find不完全相同,指针回位
p = find;
}
}
puts(a);
}
int main()
{
int i, j, k;
char a[M], find[M];
printf("请输入一段英文语句:");
//输入任意字符串
scanf("%[^\n]", a); //解释见https://zhidao.baidu.com/question/497242155339556684.html
//scanf("%s\n", a);
printf("请输入需要删去的词汇:");
scanf("%s", find);
k = my_strlen(find);
Find(a, find, k);
system("pause");
return 0;
}
理解程序中的语句:C语言scanf("%[^\n]", a);见自己另外的博客。