您的位置:首页 > 其它

常用算法题目总结四(字符串篇)

2017-07-25 16:07 232 查看

如何统计一行中有多少个单词?

问题:单词之间以空格隔开。

代码如下:

#include<iostream>
#include<list>
#include<string>
#include<algorithm>
#include<stdio.h>

using namespace std;

#define BUFFSIZE 1024;

int main()
{
char str[BUFFSIZE];
int i,count=0,word=0;
char c;
gets(str);
for(int i=0;(c=str[i++])!='\0';)
{
if(32==c)
word=0;
else if(0==word)
{
word=1;
++count;
}
}
printf("count is %d\n",count);

return 0;
}


如何将字符串逆序?

下面的方法是头尾交换的方法,还可以用递归,栈等实现方式。

代码实现如下:

char* Reverse(char* s)
{
char* start=s;
char* back=s;
while(*back)//指针指到尾部
++back;
--back;
while(start<back)
{
char t=*start;
*start++=*back;
*back--=t;
}
return s;
}


如何按单词逆序?

问题:这个是上一个问题的扩展,将一个句子逆序,例如 “this is a sentence” 逆序为“sentence a is this”。

思路:

1. 首先将单词逆序。

2. 将整个句子逆序。

代码如下:

//对单个单词逆序
void ReverseWord(char* start,char* back)
{
while(start<back)
{
char t=*start;
*start++=*back;
*back--=t;
}
}

//对整个句子逆序
char* ReverseSentence(char* s)
{
char* start=s;
char* back=s;
while(*back)
{
if(*back==' ')
{
ReverseWord(start,back-1);
++back;
start=back;
}
else{
++back;
}
}
ReverseWord(start,--back);
ReverseWord(s,back);
return s;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串算法 算法