这个程序写来写去,感觉思路不是很清楚,写完了吧,思路好像有,但是总是觉得不太好,很冗余,累赘的感觉!
哎,越往后,程序写的越慢,越不会写了!
加油,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;
}
本文介绍了一个简单的C++程序,用于将输入的一行字符整理为规范文本输出。程序通过识别单词和标点符号,将它们分别存储并打印出来,旨在帮助理解字符串处理的基本方法。

被折叠的 条评论
为什么被折叠?



