以每行一个单词的形式打印输入

本文介绍了一种使用C语言优化的单词打印程序。通过改进的逻辑判断,该程序能够更准确地识别并打印输入流中的每个单词,确保了非字母字符如空格、制表符和换行符作为单词分隔符的正确处理。此优化后的程序提高了代码的可读性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

//以每行一个单词的形式打印其输入
int main(void){
	int c;
	while((c=getchar())!=EOF){
		if(c==' ')
			putchar('\n');
		else
			putchar(c);
	}

}

 

改进后:

#include <stdio.h>
//以每行一个单词的形式打印其输入
//读到字符:打印。读到空字符::前一个为空字符;前一个不是空字符:换行。
int main(void){
	int c;
	int last;
	last=0;//初始化前一个为空字符

	while((c=getchar())!=EOF){
		if(c==' '||c=='\t'||c=='\n'){//读到空字符
			if(last==1){//前一个不是空字符
				printf("\n");
				last=0;
			}
		}
		else{//读到非空字符
			if(last==1)
				putchar(c);
			else{
				putchar(c);
				last=1;
			}
		}
	}

}

为了实现在C语言中输出文本文件中每一行的倒数第二个单词,我们可以采用如下策略: 1. **打开文件**: 使用`fopen()`函数尝试以只读模式(`"r"`)打开指定路径下的文件。 2. **逐行读取内容**:借助于`fgets()`或其他适合的方法按照行的形式提取数据。对于每一条记录下来的信息而言, 3. **解析单词序列** :将获取到的内容分割成单独词汇组成的列表形式,在这里你可以选择使用标准库提供的辅助工具如`strtok()`. 4. **找到并打印特定位置元素** : 根据题目要求我们只需要关注每个句子内部处于倒序排列次序上排位为二的那个成分即可。 下面是具体的实现代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFFER_SIZE 256 // 定义一个足够大的缓冲区大小用于存储一行文字 void print_second_last_word_per_line(const char *filename){ FILE *fp; fp = fopen(filename,"rt"); // 打开文件准备读取 if(!fp){fprintf(stderr,"\n无法打开文件。\n");exit(-1);} char buffer[BUFFER_SIZE]; while(fgets(buffer,sizeof(buffer),fp)){ // 移除换行符以便后续处理方便一些 buffer[strcspn(buffer, "\n")]='\0'; // 分割字符串获得各个单词 char *token=strdup(buffer); if(token==NULL){ fprintf(stderr,"内存分配失败\n"); continue; } char *temp=token,*prev=NULL,*secondlast=NULL; for(temp=strtok_r(temp," \t", &temp); temp!=NULL; prev=temp,temp=strtok_r(NULL," \t",&temp)) secondlast=(temp?temp:secondlast); // 确保存在两个以上的单词才去显示结果 if(prev&&strcmp(prev,secondlast)!=0) printf("倒数第2个词:%s\n",prev); free(token); } fclose(fp); } int main(){ print_second_last_word_per_line("example.txt"); return 0; } ``` 该示范程序会逐一地扫描给定的目标文本文档中的所有段落,并依据实际状况准确无误地标记出位于各段末尾方向上前一位及最后一位之间间隔的一个词条然后将其呈现出来。(注意:此段落假设输入文本是以空白字符为空白界限)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值