第二周上机实验

来源:互联网 发布:.net调用前台js函数 编辑:程序博客网 时间:2024/05/01 21:42

#include <iostream>

#include "string.h"

using namespace std;

int main()
{
 char str[200];
         cin.get(str, 100, '\n');
 
 for(int i = 0, j = 0; str[i] != '\0'; i++)
 {
  j++;
 }                                                //统计输入字符的个数

 do
 {
  if(str[0] == ' ')
  {
   for( int k = 0; k <=j; k++)
   {
    str[k] = str[k + 1];
   }
  }
 }while(str[0] == ' ');                           //去除行首的空格
 
           for(int n = 0; n <= j; n++)
 {
  do
  {
   if(str[n] == ' ' && str[n + 1] == ' ')
   {
       for(int m = n; m <= j; m++)
    {
     str[m + 1] = str[m + 2];
    }
   }
  }while(str[n] == ' ' && str[n + 1] == ' ');
 }                                                //去除连续的多个空格,仅保留一个空格

 for(int p = 0; p <= j; p++)
 {
  
  if((str[p] == ' ' && str[p + 1] == ',') || (str[p] == ' ' && str[p + 1] == '.') || (str[p] == ' ' && str[p + 1] == ';') || (str[p] == ' ' && str[p + 1] == '?') || (str[p] == ' ' && str[p + 1] == '!'))
  { 
   for(int q = p; q <= j; q++)
   {
    str[q] = str[q + 1];
   }
  }
 }                                                //保重标点符号紧跟单词的最后一个字母
   
 for(int b = 0; b <= j; b++)
 {
  if((str[b] == ',' && str[b + 1] != ' ') || (str[b] == '.' && str[b + 1] != ' ') || (str[b] == ';' && str[b + 1] != ' ') || (str[b] == '?' && str[b + 1] != ' ') || (str[b] == '!' && str[b + 1] != ' '))
  { 
         for(int c = b;c < j; j--)
   {
                str[j + 1] = str[j];
   }
   str[b + 1] = ' ';
  }
 }                                                 //保证标点符号后面有一个空格

 cout << str << endl;

 return 0;
}