字符串常见编程题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/boyaaboy/article/details/102657103

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

猜你喜欢

转载自blog.csdn.net/boyaaboy/article/details/102657103