首页 > 编程语言 >C++ 实现有汉字和英文的字符串逆转

C++ 实现有汉字和英文的字符串逆转

时间:2022-10-04 17:01:39浏览次数:54  
标签:tmp p2 p1 unsigned 汉字 char C++ 字符串 逆转

设指针p1指向初始字符串s,再新建一个字符串tmp用来存放逆转后的字符。此时可以把p1和tmp看成两条链表,指针p2为实现逆转的中转站,p2的长度为tmp和s的长度之和,接下来就通过链表的特性把p1和p2的值进行逆转。

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

void reverse(unsigned char* s) {
    int len = strlen((char*)s);
    unsigned char tmp[1024];

    unsigned char* p1 = s;
    unsigned char* p2 = tmp + len;

    cout << "strlen:" << len << endl;

    *p2-- = 0;
    while (*p1){
        if (*p1 < 0x80) {  //ASCII字符,一般都是小于等于127,即非汉字字符
            *p2-- = *p1++;
        }
        else {   //汉字字符的逆转
            *(p2 - 1) = *p1++;
            *p2 = *p1++;
            p2 -= 2;
        }
    }
    for (int i = 0; i < len; i++) {
        s[i] = tmp[i];
    }
}
int main() {
    unsigned char str[128];
    cout << "请输入一串字符:";
    cin >> str;
    reverse(str);
    cout << "result:" << str << endl;

    system("pause");
    return 0;
}

标签:tmp,p2,p1,unsigned,汉字,char,C++,字符串,逆转
From: https://www.cnblogs.com/smartlearn/p/16754043.html

相关文章

  • 字符串杂杂杂杂杂杂题
    [CF1310C]AuPontRouge首先,肯定要将所有的代价给弄出来,若先不管划分段数的限制,那么所有代价就是\(S\)的所有字串那么字串的数量也就是\(\frac{n*(n+1)}{2}\),约为\(10^6......
  • 字符串常见操作
    String的底层结构而在jdk8中,String的底层是用的字符数组。jdk9里面做了更改,节约String占用的内存。一个char占用两个字节,而程序中绝大多数String只有Latin-1字符......
  • C++并发编程 [02] :线程管控
    发起线程线程通过构建std::thread对象而启动,该对象指明线程要运行的任务。可以传入任何可调类型给std::thread来构建一个std::thread对象。需要包含头文件<thread......
  • 字符串部分知识整理
    引入:字符串最长公共前缀(LongestCommonPrefix,LCP)普通求法利用hash。设需要求\(S,T\)字符串的LCP,则可以二分长度\(len\),求一个最大的\(len\)满足\(hash(S_1\sim......
  • Effective C++ - 条款7 - 关于基类的virtual析构和non-virtual析构
    如果基类的析构是non-virtual的,在使用baseclass指针指向一个derived对象,并且这个对象由baseclass指针删除时,derived对象的成分并没有被删除,原因是baseclass定义了一个n......
  • C++ 自学笔记 Declaring references 引用
    引用:类型&Y=X;Y是X的另一个名字   pointersvsreferences(指针vs引用)(ps:引用就是用的const指针)  java:所有对象放在堆里只能用指针(不能计算用的const)访......
  • Rust从入门到精通08-字符串
    Rust字符串相对于其它语言有点复杂,主要是跟所有权有关。Rust字符串涉及两种类型:&str和String1、&str-字面量str是Rust的内置类型,&str是str的借用。可以理解为字符......
  • 字符串分隔
    #include<iostream>#include<string>#include<cstdlib>usingnamespacestd;boolfindName(intsubindex,stringsubstring,string*name){ subindex=substring.f......
  • C++ 自学笔记 const
    const变量  const是变量不是常量 指针const写在*号后面       const函数可以构成重载 ......
  • C++之字符串分割案例---数据分析-03
    stringdata="我叫李宇博,我今年13岁,我家住在不知道,今天是星期天," "我喜欢吃粑粑,我喜欢做打篮球,我的学校是太康三中,我的生日是1月1号," "我的语文成绩是:0分,我的......