字符串编程专题——(2)删除两句话中重复的单词

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);见自己另外的博客。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值