C语言实现字符串的基本 *** 作

C语言实现字符串的基本 *** 作,第1张

解决问题
  • 求子串 用Sub返回串S的第pos个字符起长度为len的子串
  • 比较 *** 作 若S>T,则返回值>0;若S=T,则返回值=0;若S
  • 定位 *** 作 若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置,否则函数值为0
  • 字符串赋值 *** 作
  • 打印字符串
C语言代码实现
#include
#include
#include
#define MAXLEN 255

typedef struct{
	char ch[MAXLEN];
	int length;
}SString;

bool SubString(SString *Sub,SString S,int pos,int len){
	if(pos+len-1>S.length){
		return false;
	}
	for(int i=pos;i<pos+len;i++){
		Sub->ch[i-pos+1] = S.ch[i];
	}
	Sub->length = len;
	return true;
}

int StrCompare(SString S,SString T){
	for(int i=0;i<=S.length&&i<T.length;i++){
		if(S.ch[i]!=T.ch[i]){
			return S.ch[i] - T.ch[i];
		}
	}
	//扫描到所有字符都相同,则长度长的串更大
	return S.length - T.length;
}

int Index(SString S,SString T){
	int i = 1,n = S.length,m = T.length;
	SString Sub; //用于暂存子串
	while(i<=n-m+1){
		SubString(&Sub,S,i,m);
		if(StrCompare(Sub,T)!=0){
			++i;
		}else{
			return i; //返回子串在主串中的位置
		}
	}
	return 0; //S中不存在与T相等的子串
}
//字符串赋值 *** 作
void assign(SString *S){
	printf("请输入字符串:\n");	
	char x;
	int i = 1;
	scanf("%c",&x);
	while(x!='\n'){
		S->ch[i] = x;
		i ++;
		scanf("%c",&x);
	}
	S->length = i-1;
}
//打印字符串
void printString(SString S){
	for(int i=1;i<=S.length;i++){
		printf("%c",S.ch[i]);
	}
	printf("\n");
}
int main(){
	SString S,T;
	assign(&S);
	assign(&T);
	printf("求子串 *** 作:\n");
	SString Sub;
	SubString(&Sub,S,2,3);
	printString(Sub);
	printf("比较 *** 作:\n");
	printf("S串和T串是否相等:%d\n",StrCompare(S,T));
	printf("定位 *** 作:\n");
	printf("出现位置:%d",Index(S,T));
	return 0;
}
测试

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存