将一行字符串整理为规范文本

本文介绍了一个简单的C++程序,用于将输入的一行字符整理为规范文本输出。程序通过识别单词和标点符号,将它们分别存储并打印出来,旨在帮助理解字符串处理的基本方法。

这个程序写来写去,感觉思路不是很清楚,写完了吧,思路好像有,但是总是觉得不太好,很冗余,累赘的感觉!

哎,越往后,程序写的越慢,越不会写了!

加油,Andy-刘!

/************************************
/*		学生:刘中华
/*		日期:2014-1-10
/*		功能:将一行字符整理为规范文本输出
/*
***************************************/
#include<iostream>
using namespace std;
void part_word(char a[]);
void main()
{
	char s[]="you are my super   ! superstar ,";
	part_word(s);
	
	
	
}
void part_word(char a[])
{
	int i=0,j=0,m,n=0,k[20],p;//k用来存最长单词的位置
	char b[20],c[20][20];
	bool word=false;
	while(a[i]!='\0')
	{
		
			if(a[i]==' '||a[i]==','||a[i]=='.'||a[i]==';'||a[i]=='!') 
			{	
				word=false;//输入为空格不构成单词
			
			}
			else word=true;
			if(word==true)//现在开始构成单词
			{
				b[j]=a[i];
				j++;//只有当开始构成单词后,j才不为零,j表示了单词字符个数
			}
			if(j!=0&&word==false)//j!=0表示开始构成单词了,再次遇到空格,则表示一个单词结束了
			{
				for(m=0;m<j;m++)
				{
					k[n]=j;//k[n]存放每行单词的字符数
					cout<<b[m];
					c[n][m]=b[m];//将单词都存在二位数组里,每行存一个单词
				}
				
				
				j=0;
				n++;
				cout<<endl;
			}
		
		if(a[i]==','||a[i]=='.'||a[i]==';'||a[i]=='!') 
		{
			c[n][0]=a[i];
			k[n]=1;//最开始就是忽略了这里的长度,但是打印出来的始终是“?”,按道理,没有长度的话,就是随机数,就是瞎打了,
			cout<<n<<c[n][0]<<"*********";//具体为什么是?,说不清楚,反正就是得不到正确结果
			n++;
		}

		i++;//开始下一个字符的判断
	}	
	for(m=0;m<n;m++)//行数为n
	{
		for(p=0;p<k[m];p++)
			cout<<c[m][p];
		cout<<endl;
	}
	for(m=0;m<n;m++)
	{
		for(p=0;p<k[m];p++)
			cout<<c[m][p];
		if(c[m+1][0]==','||c[m+1][0]=='.'||c[m+1][0]==';'||c[m+1][0]=='!'||c[m+1][0]=='?')//如果下一行第一个字母是标点就直接打印,在打空格
		{
			cout<<c[m+1][0]<<" ";
			m++;//是标点,直接打印出来,再打空格,然后跳过标点行
		}
		else
			cout<<" ";
	}
	cout<<endl;
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值