C++中常用字符串相关的编程题

2023-11-06

索引

找出字符串中的数字,字母和符号,并分别存储

找出字符串中所有不重复的字符,并输出

统计字符串中每个字符的个数,并输出

编译环境

以下所用的开发环境是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;
}

运行结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中常用字符串相关的编程题 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐