现在的位置: 首页 > 综合 > 正文

C语言代码分享之字符串匹配及文件读写结合

2017年11月30日 ⁄ 综合 ⁄ 共 2134字 ⁄ 字号 评论关闭

这个代码功能是:有一个密码验证功能(这里没有做回显操作,即用*代替输入的内容),验证通过后从执行的参数个数来判定要输出的内容,如果参数是程序本身,则输出文本里面的命令内容,如果参数带了,那么则与文本内容匹配,如果匹配成功,则执行这个命令,如果不成功则输出没有找到该命令。

直接上代码了:

/*
 * =====================================================================================
 *
 *       Filename:  main.cpp
 *
 *    Description:  
 *
 *        Version:  1.0
 *        Created:  03/12/2013 05:44:05 PM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  BackGarden_Straw.Neo (BackGarden_Straw), 20549304@163.com
 *   Organization:  BackGarden_Straw
 *
 * =====================================================================================
 */

//define the header file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

//define the marco var
#define SIZE 1024

int main(int argc, const char *argv[]){

	//input the test login in executable program.
	char Password[] = {"test"};
	char LoginPassword[16];

	do {
		printf("please input password to login:");

		scanf("%s",LoginPassword);
		
		//printf("1=%d,2=%d,3=%d\n",strcmp(Password,LoginPassword),strlen(Password),strlen(LoginPassword));
		//printf("1=%d,2=%d,3=%d\n",strcmp(Password,LoginPassword),strlen(Password),strlen(LoginPassword));
		if ( (strcmp(Password,LoginPassword) == 0) &&
			 (strlen(Password) == strlen(LoginPassword))){
			printf("Enjoy it!\n");
			break;
		}else{
			printf("your password can't login.\n");
			exit(0);
		}

	} while (1);


	//do what after login
	FILE *source;
	const char CommandPath[] = {"command.txt"};
	char Buffer[SIZE];
	int status = 0;

	if (!(source = fopen(CommandPath,"r"))){
		printf("command file can't read or not exist.\n");
		exit(1);
	}
	
	//List the commands or execute the command
	if (argc < 2){	//List the commands
		
		printf("Command List:\n");
		while (fgets(Buffer,sizeof(Buffer),source)){
			printf("%s",Buffer);
		}

	}else{	//Check the command
		
		while (fgets(Buffer,sizeof(Buffer),source)){

			if (strncmp(argv[1],Buffer,strlen(Buffer)-1) == 0){
//这里之所以要将长度-1,是因为后面还多了一个 \n 如果直接strcmp()进行对比得出来的将是 \n 的ASCII值10
				printf("find the command.\n");
				status = 1;
				
				//send the command to services
				char ReceiveCommand[SIZE];
				
				int i = 0;
				for (i = 1; i < argc; i++){
					strcat(ReceiveCommand,argv[i]);
					strcat(ReceiveCommand," ");
				}

				printf("the command is:%s\n",ReceiveCommand);

				break;
			}else{
				continue;
			}
		}

		if (status == 0){
			printf("sorry,can't find your command\n");
		}

	}

	//close the command file
	if (fclose(source)){
		printf("Error in close file");
		exit(1);
	}
	return 0;
}

代码量不大,注释就不多写了。

ps:执行时需要在同级目录下有一个command.txt

抱歉!评论已关闭.