索引
找出字符串中的数字,字母和符号,并分别存储
找出字符串中所有不重复的字符,并输出
统计字符串中每个字符的个数,并输出
编译环境
以下所用的开发环境是vs2010,创建的都为控制台输出程序。下面只贴出创建项目后修改了的cpp文件,即主要实现,其它文件保持自动生成的不变。
示例1-找出字符串中的数字,字母和符号,并分别存储
项目结构
具体的实现如下:
// sortTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
/************************************************************************/
/* 找出字符串中的数字,字母和符号,并分别存储
* 不足:输出的数字是其数字字符的十进制,没有按照字符输出/
/************************************************************************/
int getCharType(char c)
{
int nType = 0;
if(c >= 48 && c <= 57){
nType = 1;
}else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
{
nType = 2;
}else{
nType = 3;
}
return nType;
}
void storeToVec(const char c,vector<int> &nVec,vector<char> &cVec,vector<char> &scpaceVec){
int type = getCharType(c);
switch(type){
case 1:
nVec.push_back(c);
break;
case 2:
cVec.push_back(c);
break;
case 3:
scpaceVec.push_back(c);
break;
default:
break;
}
}
template<typename T>
void printVec(const vector<T> vec){
cout<<"================================="<<endl;
vector<T>::const_iterator it = vec.begin();
for (;it != vec.end();++it)
{
cout<<(char)*it<<"\t";
}
cout<<endl;
}
void sortString(const char *parr){
int i = 0;
vector<int> nVec;//存储0-9数字
vector<char> cVev;//存储a-z或A-Z的字符
vector<char> spaceVec;//存储回车符等
while (parr[i] != '\0')
{
storeToVec(parr[i],nVec,cVev,spaceVec);
++i;
}
printVec<int>(nVec);
printVec<char>(cVev);
printVec<char>(spaceVec);
}
int _tmain(int argc, _TCHAR* argv[])
{
const char array[] = "sdgygy7764s22dfsjhhj#!@kdf*";
sortString(array);
system("pause");
return 0;
}
运行结果如下:
示例2-找出字符串中所有不重复的字符,并输出
项目结构
实现代码如下:
// stringUniqueOutTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
/************************************************************************/
/* 找出字符串中所有不重复的字符,并输出 */
/************************************************************************/
void compareExist(vector<char> &c,char sc){
bool flag = false;
for(int i = 0; i < c.size(); ++i){
if(sc == c[i]){
flag = true;
break;
}
}
if(!flag){
c.push_back(sc);
}
}
void printVec(const vector<char> vec){
vector<char>::const_iterator it = vec.begin();
while(it != vec.end()){
cout<<*it<<"\t";
++it;
}
cout<<endl;
}
void printSingleChar(const char *parr){
int i = 0;
vector<char> cVec;
if(parr[i] != '\0'){
cVec.push_back(parr[i]);
++i;
}
while (parr[i] != '\0'){
compareExist(cVec,parr[i]);
++i;
}
printVec(cVec);
}
int _tmain(int argc, _TCHAR* argv[])
{
const char srray[] = "hudfyegtysdsgftfsd";
printSingleChar(srray);
system("pause");
return 0;
}
运行结果如下:
示例3-统计字符串中每个字符的个数,并输出
项目结构
实现代码如下:
// countCharNumberTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
/************************************************************************/
/* 统计字符串中每个字符的个数,并输出 */
/************************************************************************/
bool findCharIsInVec(vector<char> &vec,char c){
vector<char>::const_iterator it = vec.begin();
for(;it != vec.end(); ++it){
if (*it == c)
{
return true;
}
}
return false;
}
void charOccurNumber(int &count,char c,const char *parr,int i,int nSize){
for (int n = i + 1; n < nSize; ++n)
{
if(c == parr[n]){
++count;
}
}
}
void CountChar(const char * parr){
vector<char> cVec;
int count = 0;
int i = 0;
int nSize = strlen(parr);//求字符串的长度
while (parr[i] != '\0'){
if(!cVec.empty()){
bool ret = findCharIsInVec(cVec,parr[i]);
if (ret)
{
++i;
continue;
}
}
++count;
charOccurNumber(count,parr[i],parr,i,nSize);
cout<<"字符"<<parr[i]<<"出现的次数:"<<count<<endl;
cVec.push_back(parr[i]);
count = 0;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
const char starr[] = "hudhfuhuheweashjhjdsfsd";
CountChar(starr);
system("pause");
return 0;
}
运行结果如下:
示例3的第二种实现:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
/************************************************************************/
/* 统计字符串中每个字符的个数,并输出 */
/************************************************************************/
void showCharNums(const char* pArr)
{
if(pArr==NULL)
return;
char ascii[256] = {0};
int nLen = strlen(pArr);
for (int i=0;i<nLen;++i)
{
ascii[pArr[i]]++;//ascii[pArr[i]] = ascii[pArr[i]] + 1
}
for (int i=0;i<256;++i)
{
if (ascii[i]>0)
{
cout<<(char)i<<" : "<<(int)ascii[i]<<endl;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
const char starr[] = "hudhfuhuheweashjhjdsfsd";
CountChar(starr);
cout<<"========================================="<<endl;
showCharNums(starr);
system("pause");
return 0;
}