常用算法题目总结四(字符串篇)
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; }