英文语句处理(空格处理)
2015-09-07 21:46
281 查看
要求:去除句子句首句尾的空格,单词间的空格若连续出现多个,只保留一个
注释:两种方法实现了。第一种方法比较水,参照之前写的把句子中的空格转换为“%20”那道题,硬是调用自带的函数,能实现,但感觉略复杂化了,就不多说了
第二种方法,逐个读取字符串里的字符,逐个判断,简单易懂,先去除句首句尾空格,缩小范围,再在这个小范围里逐个判断,实现
#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
char* formatString1(char* sourceString){
int length1 = strlen(sourceString);
int length2 = 0;
if(length1==0)
return '\0';
char space[]= " ";
char final[256];
char *p;
int cnt=0;
//句首处理
p=sourceString;
while(*p == ' ')
p++;
strcpy(sourceString,p);
length1 = strlen(sourceString);
while(strstr(sourceString,space)!=NULL)
{
p=strstr(sourceString,space);
length2=strlen(p);
memcpy(&final,sourceString,(length1-length2));
final[(length1-length2)]='\0';
p++;
p++;
while( *p == ' ')
{
cnt++;//计空格数
p++;
}
--p;//留一个空格
strcat(final,p);
length1=length1-(cnt+1);
cnt=0;
strcpy(sourceString,final);
}
//句尾处理
length1 = strlen(sourceString);
p=&sourceString[length1-1];
while(*p == ' ')
{
p--;
cnt++;
}
sourceString[length1-cnt]='\0';
return sourceString;
}
char* formatString2(char* sourceString){
int length=strlen(sourceString);
if(length==0)
return "";
int start=0,end=length-1;
while(sourceString[start] == ' ')//句首
start++;
while(sourceString[end] == ' ')//句尾
end--;
char str[256];
int pos=0;
for(int i=start;i<=end;i++)
{
if(sourceString[i] != ' ')
str[pos++]=sourceString[i];
else if(sourceString[i] == ' ' && sourceString[i-1] == ' ')//多个空格
{
str[pos++]=' ';
while(sourceString[i] == ' ')
i++;
i--;//while循环里还要加一次
}
else if(sourceString[i] == ' ' && sourceString[i+1] != ' ')//单独一个空格
str[pos++]=' ';
}
str[pos]='\0';
return str;
}
int main()
{
char str[]= " I love meituan ";
char *p=formatString2(str);
printf("%s//over\r\n",p);
}
注释:两种方法实现了。第一种方法比较水,参照之前写的把句子中的空格转换为“%20”那道题,硬是调用自带的函数,能实现,但感觉略复杂化了,就不多说了
第二种方法,逐个读取字符串里的字符,逐个判断,简单易懂,先去除句首句尾空格,缩小范围,再在这个小范围里逐个判断,实现
#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
char* formatString1(char* sourceString){
int length1 = strlen(sourceString);
int length2 = 0;
if(length1==0)
return '\0';
char space[]= " ";
char final[256];
char *p;
int cnt=0;
//句首处理
p=sourceString;
while(*p == ' ')
p++;
strcpy(sourceString,p);
length1 = strlen(sourceString);
while(strstr(sourceString,space)!=NULL)
{
p=strstr(sourceString,space);
length2=strlen(p);
memcpy(&final,sourceString,(length1-length2));
final[(length1-length2)]='\0';
p++;
p++;
while( *p == ' ')
{
cnt++;//计空格数
p++;
}
--p;//留一个空格
strcat(final,p);
length1=length1-(cnt+1);
cnt=0;
strcpy(sourceString,final);
}
//句尾处理
length1 = strlen(sourceString);
p=&sourceString[length1-1];
while(*p == ' ')
{
p--;
cnt++;
}
sourceString[length1-cnt]='\0';
return sourceString;
}
char* formatString2(char* sourceString){
int length=strlen(sourceString);
if(length==0)
return "";
int start=0,end=length-1;
while(sourceString[start] == ' ')//句首
start++;
while(sourceString[end] == ' ')//句尾
end--;
char str[256];
int pos=0;
for(int i=start;i<=end;i++)
{
if(sourceString[i] != ' ')
str[pos++]=sourceString[i];
else if(sourceString[i] == ' ' && sourceString[i-1] == ' ')//多个空格
{
str[pos++]=' ';
while(sourceString[i] == ' ')
i++;
i--;//while循环里还要加一次
}
else if(sourceString[i] == ' ' && sourceString[i+1] != ' ')//单独一个空格
str[pos++]=' ';
}
str[pos]='\0';
return str;
}
int main()
{
char str[]= " I love meituan ";
char *p=formatString2(str);
printf("%s//over\r\n",p);
}
相关文章推荐
- 关于synchronized关键字的一点补充
- win7配置sql server 2005数据库服务器
- 面试之简答题
- 赋值运算符的重载
- android 动画 从view顶部退出、进入(系列动画)
- 数据库学习
- Mifare系列5-存储结构(转)
- shell syntax error near unexpected token
- 阿里云盾网站安全防御(WAF)的使用方法(图文)
- centos下安装mysql
- Android数据存储——SDcard
- uC/OS--II的时间管理
- Linux-----Ubuntu搭建FTP服务器
- CCLight解析
- XAMPP Apache服务器解析php页面汉字乱码的解决
- CentOS 加载/挂载光驱
- 一个简单div+css来练习
- 利用js实现简单计算器
- Android Studio导入项目的问题
- substr(),substring,slice()的用法