文档读取每一个字符——尤其是空格

本文介绍如何使用C++通过强制读取文件中的每一字符,包括空格,来处理文本文件,并将未重复的单词写入另一个文件。详细解释了关键代码段的作用和实现方式。

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

fin>>noskipws;    //可以强制读每一个字符,连空格也不漏掉!

这一行代码解决了我烦恼了很久的问题!

	ifstream fin;															//打开每个文件
	fstream finn;															//为了便于观察中间结果,将拆出来的没有查过重的单词写入一个叫ori.txt的文档								
	fin.open(filename);
	finn.open("G://ori.txt",ios::out | ios::app);
	if (!fin)
		cout<<"error!"<<endl;
	if (!finn)
		cout<<"error!"<<endl;
	//添加全局函数进行文档内容处理——倒排索引的基础!!!!!!
	//把打开的文件的每个词拆出来存入一个文件



	int index;
	char c;
	fin>>noskipws;					//注意!!!!!!!!!强制读每一个字符!!!!包括空格
	while (!fin.eof())								
	{
		index=1;
		fin>>c;
		if ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
		{
			index=0;
			finn<<c;
		}
		else 
			if (index==1)
			{
				finn<<" ";
				index=0;
			}
	}


	finn.close();
	fin.close();
    return true;

### 如何在字符流中去除字符串的空格 对于不同编程语言,在处理字符流并从中去除空格时有不同的实现方式。 #### Python 中去除字符流中的空格 Python 提供了简洁的方式来处理这一需求。通过读取文件或任何其他形式的输入作为字符流,并利用 `strip()` 方法来移除每行开头和结尾处多余的空白字符[^1]。然而,`strip()` 只能作用于单个字符串而非整个流;因此通常会结合循环结构逐行处理: ```python with open('input.txt', 'r') as file: lines = (line.strip() for line in file) # 去掉每一行首尾多余的空间 cleaned_text = '\n'.join(lines) print(cleaned_text) ``` 此代码片段展示了如何打开一个文本文件并将其中的内容按照行的形式读入内存,接着使用生成器表达式迭代这些行并对每一行应用 `strip()` 函数以清除不必要的前导和拖尾空间,最后再将所有清理后的行重新组合成一个新的字符串表示完整的文档内容。 #### C 语言中去除字符流中的空格 当涉及到C语言时,则需更加手动地操作字符数组或者指针来进行相同的操作。由于修改原始字符串可能不是最佳实践[^2],建议创建新的缓冲区存储经过过滤的结果: ```c #include <stdio.h> #include <ctype.h> void remove_spaces(char *dest, const char *src) { while (*src != '\0') { if (!isspace((unsigned char)*src)) { // 判断当前字符是否为空白字符 *dest++ = *src; } src++; } *dest = '\0'; } int main(void){ char source[]=" Hello world! "; size_t length=strlen(source)+1; char destination[length]; remove_spaces(destination,source); puts(destination); return 0; } ``` 上述程序定义了一个名为 `remove_spaces` 的辅助函数,该函数接受两个参数——目标地址 (`dest`) 和源地址 (`src`) ,遍历给定的源串(`src`) 并仅保留非空白字符到目的位置(`dest`) 上面的例子还包含了简单的测试用例展示其工作原理。 #### Java 中去除字符流中的空格 Java提供了多种内置方法可用于从字符串中删除特定模式下的字符,如正则表达式的运用使得复杂匹配变得简单易行[^4]。下面是一个例子,它演示了怎样采用 `replaceAll()` 来消除包括但不限于制表符、换行符在内的各种类型的空白符号: ```java public class Main { public static void main(String[] args) throws Exception{ String originalText = " This is a test string with spaces.\nAnd newlines."; // 使用正则表达式替换所有空白字符为空字符串 String noSpacesText = originalText.replaceAll("\\s+", ""); System.out.println(noSpacesText); } } ``` 这里 `\s+` 表达式代表任意数量连续出现的一般意义上的“空白”,即不仅限于普通的ASCII空格键产生的间隔,还包括诸如`\t`, `\n`, `\r`等形式更为广泛的分隔手段。调用 `replaceAll()` 将会使符合条件的位置被替换成指定的新值(此处为空),从而达到去除非必要间距的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值