Um artigo para ensiná-lo a compreender uma sequência de estruturas de dados

Um artigo para ensiná-lo a compreender uma sequência de estruturas de dados

① A definição do tipo de string

A definição de string é muito mais simples do que pilha e fila. Existem muitas funções para manipular strings na linguagem C, e a biblioteca de funções correspondente é string.h. O histórico de desenvolvimento da string é fornecido a seguir para aprofundar a impressão do leitor. (Não é o ponto principal, você pode pular se já tiver algum entendimento)

O objeto de processamento não numérico no computador são basicamente dados de string. Em linguagens de programação anteriores, as
cadeias de caracteres apareciam como constantes para entrada e saída. Com o desenvolvimento de programas de processamento de linguagem, o processamento de strings surgiu.
Desta forma, as cadeias de caracteres aparecem como um tipo de variável em cada vez mais linguagens de programação e uma
série de operações de cadeias de caracteres também são produzidas . Strings são geralmente chamados de strings para abreviar. No compilador assembly e de linguagem, o programa de origem e o
programa de destino são todos dados de cadeia de caracteres. No procedimento de processamento de transações, o nome e o endereço do cliente, bem como o nome, o local de origem e as especificações das mercadorias,
são geralmente tratados como cadeias de caracteres. Outro exemplo são os sistemas de recuperação de informações, programas de edição de texto, sistemas de perguntas e respostas,
sistemas de tradução de linguagem natural e programas de análise de música, todos os quais usam dados de string como o objeto de processamento.
No entanto, a estrutura de hardware do computador que usamos hoje em dia reflete principalmente as necessidades de cálculos numéricos, portanto, processar
dados de string é muito mais complicado do que processar números inteiros e de ponto flutuante. Além disso, em diferentes tipos de aplicações, as
cadeias processadas apresentam características diferentes.Para realizar o processamento de cadeias de forma eficaz, é necessário utilizar uma
estrutura de armazenamento adequada de acordo com a situação específica . Neste capítulo, discutiremos algumas operações básicas de manipulação de strings e várias estruturas de armazenamento diferentes.

Para a descrição da string, esta é a definição no livro didático. Embora simples, os leitores devem lê-lo com atenção.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

② Representação e realização de string

Para strings, a maioria das operações em matrizes de caracteres pode ser feita usando funções na biblioteca de funções da linguagem C. O seguinte é baseado na string, combinada com a estrutura e não se aplica às funções integradas da biblioteca string.h O autor implementou o algoritmo de operação de alocação de heap para sua referência, estudo e uso. Nas capturas de tela do livro abaixo, o pseudocódigo explicou o processo de implementação da função em detalhes, então não o repetirei mais tarde.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Com relação ao algoritmo de correspondência de padrões e algoritmo de otimização para strings mais tarde, os leitores interessados ​​podem ler e aprender por si próprios. A seguir está uma captura de tela da operação do algoritmo acima:
Insira a descrição da imagem aqui

Finalmente o código

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct string)
struct string{
    
    
	char *ch;
	int length;
};
int main()
{
    
    
	char s1[5]="123",s2[5]="456";
	struct string *string1,*string2,*string3,*string4;
	struct string *StrAssign(char *chars);	// 生成一个其值等于串常量的串str
	int StrLength(struct string *str);	// 返回str元素的个数,称为串的长度
	int StrCompare(struct string *str1,struct string *str2);	// 若str1大于str2,返回值>0;若str1大于str2,返回值<0;若相等,返回值=0
	void ClearString(struct string *str);	// 将str清为空串
	struct string *Concat(struct string *str1,struct string *str2);	// 将str1和str2合成新串
	void SubString(struct string *str,struct string *str2,int pos,int len);	// 用sub返回串str中第pos个字符起长度为len的字串

	// 测试
	string1 = StrAssign(s1);	// 初始化string1,string2,并将其ch的值分别赋为s1和s2
	string2 = StrAssign(s2);
	string4 = StrAssign(s1);	// 给string4的ch赋上初值
	printf("%s\n",string1->ch);	// 输出string1的ch字符串
	printf("%d\n",StrCompare(string1,string2));	// 比较string1和string2的ch字符串的大小
	string3 = Concat(string1,string2);	// 连接string1和string2
	printf("%s\n",string3->ch);
	SubString(string3,string4,1,2);	// 测试SubString函数
	printf("%s\n",string4->ch);
	ClearString(string1);	// 将string1清为空串

	return 0;	
}

struct string *StrAssign(char *chars)
{
    
    
	// 生成一个其值等于串常量的串str
	struct string *str;
	str = (struct string*)malloc(LEN);
	int i;
	for(i = 0;chars[i] != '\0';i++);
	str->length = i;
	str->ch = chars;
	return str;
}	

int StrLength(struct string *str)
{
    
    
	// 返回str元素的个数,称为串的长度
	return str->length;
}	

int StrCompare(struct string *str1,struct string *str2)
{
    
    
	// 若str1大于str2,返回值>0;若str1大于str2,返回值<0;若相等,返回值=0
	int i;
	for(i = 0;i < StrLength(str1) && i < StrLength(str2);i++){
    
    
		if(str1->ch[i] != str2->ch[i]){
    
    
			return str1->ch[i] - str2->ch[i];
		}
	}
	return str1->ch[i] - str2->ch[i];
}

void ClearString(struct string *str)
{
    
    
	// 将str清为空串
	str->ch = "";
	str->length = 0;
	printf("clear over!\n");
}	

struct string *Concat(struct string *str1,struct string *str2)
{
    
    
	// 将str1和str2合成新串
	struct string *str3;
	int i,j;
	str3 = (struct string*)malloc(LEN);
	str3->ch = str1->ch;
	str3->length = str1->length + str2->length;
	for(i = str1->length,j = 0;j < str2->length;i++,j++){
    
    
		str3->ch[i] = str2->ch[j];
	}
	str3->ch[i] = '\0';
	return str3;
}	

void SubString(struct string *str,struct string *str2,int pos,int len)
{
    
    
	// 用sub返回串str中第pos个字符起长度为len的字串
	int i,j;
	for(i = pos,j = 0;i < pos + len;i++,j++){
    
    
		str2->ch[j] = str->ch[i];
	}
	str2->ch[j] = '\0';
	str2->length = len;
}	

Acho que você gosta

Origin blog.csdn.net/wlfyok/article/details/114241912
Recomendado
Clasificación