`
wangxiaohigh
  • 浏览: 1427128 次
文章分类
社区版块
存档分类
最新评论

面试字符串处理之单词翻转

 
阅读更多

问题:将一句话里的单词进行倒置,标点符号不倒置。例如"i come from nanjing."输出结果为"nanjing. come from i"。

分析:第一步,将字符串完全倒置,即".gnijnan morf emoc i"

第二步,将每个单词进行部分倒置,即"nanjing. from come i"

实现一:

#include <stdio.h>

#include <string.h>
#include <stdlib.h>
char * convert (char* pure)
{


char *temp=(char *)malloc(strlen(pure)+1);
int i=0;
int j=strlen(pure);
int pre=0;
int k=0;
temp[j]='\0';
for (i=0;i<strlen(pure);i++)
{
temp[--j]=pure[i];//字符串反转
}
for(i=0;i<strlen(temp);i++)
{
if(temp[i]==' ')
{
k=i;
for(j=pre;j<i;j++)
pure[j]=temp[--k];
pure[j]=' ';
pre=i+1;
}
if(i==(strlen(temp)-1))
{
k=i;
for(j=pre;j<=i;j++)
pure[j]=temp[k--];
}
}
return pure;
}
int main(int argc, char* argv[])
{
char a[]="am loving you baby";
convert(a);
printf("%s\n",a);
return 0;

}

实现二:(较为清楚的实现)

#include <stdio.h>
#include <string.h>
void strReverse(char *str,int n)
{
int i = 0;
int j = 0;
int begin;
int end;
char temp;

//...............第一步:整体倒置......................//
j = n-1;
while (j>i)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
i++;
j--;
}
printf("after reversing wholly string = %s\n",str);
//...............第二步:按单词部分倒置......................//
i = 0;
while (str[i]!='\0')
{
if (str[i]!=' ')
{
begin = i;
while ((str[i]!='\0') && (str[i]!=' '))
{
i++;
}
i = i-1;
end = i;
}
while (begin<end)
{
temp = str[begin];
str[begin] = str[end];
str[end] = temp;
begin++;
end--;
}
i++;
}
}
int main()
{

char str[] = "i come from nanjing.";
int j = 0;

j = strlen(str);
printf(" string = %s\n",str);
strReverse(str,j);
printf(" string = %s\n",str);
return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics