您的位置:首页 > 其它

英文语句处理(空格处理)

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: