C语言实现在英语句子查找和替换一个单词。

用C语言实现从字符串中读取存在单词的位置,并替换成别的单词,可用于英语句子中的单词替换。


注意:

1、该程序被替换的是单个单词,而不是单词里的字符,如替换"like"里的'i''u'

效果图如下:


2、被替换的不能是多个单词的组合,如替换"like you""hate you"

效果图如下:


3、替换的单词只能是个单词,如替换"like you"里的"you""me"

效果图如下:


4、替换的单词可以为多个,如替换"like you"里的"you""you and me"

效果图如下:



具体代码如下:(可能存在不足之处,希望能给予指出,谢谢!)


#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int searchWord(char S[],char W[]);
char* replaceWord(char S[], char W[], int pos, char R[]);

int main(){
	char S[100]="like you";
	char temp0[20];
	char temp1[20];
	char *result;

	int i;
	printf("原文字为:%s\n请输入要替换的单词:",S);
	gets(temp0);
	i=searchWord(S,temp0);
	if(i==-1){
		printf("句子里不存在该单词!");
	}
	else{
		printf("请输入要替换的单词:");
		gets(temp1);
		result = replaceWord(S,temp0,i,temp1);
		printf("%s",result);
	}
	return 0;
}

//查询单词在句子的开端S代表Sentence(句子),W代表Word(单词)
int searchWord(char S[],char W[]){
	int i,j;				//循环变量
	int n;					//句子长度+1('\0')
	int k;					//单词长度
	
	n=strlen(S)+1;			//获取句子长度+1('\0')
	k=strlen(W);			//获取单词长度
	
	for(i=0;i<n-k;i++){			//循环到n-k,因为n-k后面,找不到含有k个字符的单词了。
		for(j=0;j<k;j++){				//循环单词每个字母
			if(S[i+j]!=W[j]||W[j]==' '){		//当S[i+j]不与W[j]相等,或者单词里出现空格时跳出
				break;
			}
		}
		if(j==k&&(S[i+j]==' '||S[i+j]=='\0')){		
			/*j==k,表示句子里存在与单词完全匹配的字母(可能还不是单词)。如String与tri此时匹配能成功。
			而S[i+j]等于' '或者'\0',表示句子后面分割或者结束。但匹配的段落前面不一定分割。
			如String与ing匹配能成功,但String与tri匹配就不能成功了。*/
			if(i==0||(i>0&&S[i-1]==' ')){		//此处判断是否有前分割,只有句首和存在前分割的段落才是单词
				return i;
			}
		}
	}
	return -1;
}

char* replaceWord(char S[], char W[], int pos, char R[]){
	int sizeS = strlen(S)+1;
	int sizeW = strlen(W);
	int sizeR = strlen(R);
	int size = sizeS - sizeW + sizeR;
	int i, j;
	char* result = (char*)malloc(sizeof(char)*size);			//程序未释放内存,你们可按需要改进

	for(i=0;i<pos;i++){
		result[i] = S[i];
	}
	for(i=pos;i<pos+sizeR;i++){
		result[i] = R[i-pos];
	}
	for(pos+sizeR;i<size;i++){
		result[i]=S[i+sizeW-sizeR];
	}
	return result;
}


  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 在 C 语言,可以使用以下步骤来统计和替换文件单词: 1. 打开文件。使用 fopen 函数打开文件,并获取文件指针。 2. 读取文件内容。使用 fgets 函数读取文件的一行内容,并将其存储在字符串变量。 3. 分离单词。使用 strtok 函数将读取的字符串分割成单独的单词。 4. 统计单词。使用循环遍历分离出的所有单词,并使用 if 语句比较单词是否与要统计的单词相同。如果相同,则将计数器加 1。 5. 替换单词。使用 strstr 函数搜索要替换单词,如果找到了,则使用 strncpy 函数将新单词复制到原来的单词位置。 6. 重复步骤 2 到 5,直到读取到文件末尾为止。 7. 关闭文件。使用 fclose 函数关闭文件。 ### 回答2: 使用C语言统计和替换文件单词可以通过以下步骤实现: 1. 打开需要操作的文件,可以使用`fopen()`函数打开文件,并指定读取模式。 2. 通过循环读取文件的内容,可以使用`fscanf()`函数读取单词,直到文件结束。 3. 统计单词数量,可以使用一个变量来保存单词的个数,在每读取一个单词后,将该变量加1。 4. 进行单词替换,可以使用`fseek()`函数将文件指针定位到需要替换的位置,然后使用`fprintf()`函数将新的单词写入到文件。 5. 关闭文件,使用`fclose()`函数关闭文件,释放资源。 具体的代码示例如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *file; char word[100], replace[100], filename[100]; int count = 0; // 打开文件 printf("请输入要操作的文件名:"); scanf("%s", filename); file = fopen(filename, "r+"); if (file == NULL) { printf("文件打开失败!\n"); exit(1); } // 输入需要替换单词和新单词 printf("请输入需要替换单词:"); scanf("%s", word); printf("请输入新的单词:"); scanf("%s", replace); // 统计和替换单词 while (fscanf(file, "%s", word) != EOF) { if (strcmp(word, replace) == 0) { count++; fseek(file, -strlen(replace), SEEK_CUR); fprintf(file, "%s", replace); } } // 输出统计结果 printf("文件共有%d个单词替换为%s。\n", count, replace); // 关闭文件 fclose(file); return 0; } ``` 以上是一个简单的示例,通过该代码可以实现统计和替换文件单词。当然,这只是一个基础的例子,实际可能需要考虑更复杂的情况,比如单词的大小写、标点符号等。 ### 回答3: C语言可以很方便地实现统计和替换文件单词。首先,需要打开指定的文件,并且逐行读取文件内容。利用C语言提供的文件操作函数,我们可以使用fopen()函数来打开文件,并通过fgets()函数逐行读取文件内容。 接下来,我们可以利用字符串处理函数来进行单词的统计和替换。对于统计单词,我们可以首先将每一行的内容按照空格或标点符号进行分割,然后通过遍历分割后的字符串数组,统计含有单词的个数。可以使用strtok()函数进行字符串的分割,然后通过遍历分割后的字符串数组,判断每个字符串是否为单词。 对于替换单词,我们可以使用字符串处理函数strstr()来查找文件匹配的单词,然后使用strcpy()函数来替换。 最后,需要将统计和替换后的文件内容写回到原文件。我们可以使用fwrite()函数将修改后的文件内容写回到原文件。 需要注意的是,在进行文件操作时,我们应该注意错误处理,即检查文件的打开是否成功,以及操作是否成功。可以使用feof()函数来判断是否到达文件结尾,如果到达文件结尾跳出循环。 综上所述,通过逐行读取和处理文件内容,可以使用C语言实现文件单词的统计和替换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值