c++ - C ++反转字符串但首先打印数字
问题描述
我在课堂上得到了一个项目并且几乎完成了,我需要获取一串数字和字母并返回该字符串,其中首先打印数字,然后以相反的顺序打印字母(例如 abc123 应该返回 123cba)。到目前为止,我的代码首先返回一个字符串,其中包含数字和字母的原始顺序(例如 abc123 返回 123abc)。我可以用两个循环来做到这一点,但是分配要求我的代码只遍历初始字符串一次。这是我到目前为止的代码......
#include <iostream>
#include <string>
#include "QueType.h"
#include "StackType.h"
using namespace std;
int main ()
{
QueType<char> myQueue;
StackType<char> myStack;
string myString="hello there123";
char curchar;
string numbers, letters;
for (int i = 0; i < myString.length(); i++) {
if (isdigit(myString.at(i))) {
myQueue.Enqueue(myString.at(i));
myQueue.Dequeue(curchar);
numbers += curchar;
//cout<<numbers<<endl;
}
else if (islower(myString.at(i))) {
myStack.Push(myString.at(i));
curchar = myStack.Peek();
myStack.Pop();
letters += curchar;
//cout<<curchar<<endl;
}
}
cout<<(myString = numbers + letters)<<endl;
}
在我的代码中,我有两个 .h 文件,它们设置了一个堆栈和一个队列。使用给定的字符串,代码在字符串中循环查看是否看到字母或数字。然后将字符串中的位置用数字保存到队列中,用字母将其保存到堆栈中。
我能想到颠倒字母顺序的唯一另一种方法是在 if else 语句中,而不是在每个循环中都有 char = myStack.Peek() ,将其更改为 char += myStack.Peek() 但是当我得到奇怪的字母时那个会发生。
解决方案
因为你已经得到了带有字母的字符串,你基本上可以将它反转,就是这样。
//emplace version:
void reverse_str(std::string& in)
{
std::reverse(in.begin(), in.end());
}
//copy version
std::string reverse_str(std::string in)
{
std::reverse(in.begin(), in.end());
return in;
}
在您的情况下, emplace 版本将是最佳匹配。在其他情况下(例如,当您想保留原始字符串时)首选副本版本。
添加一个示例以使其尽可能干净。
int main()
{
std::string inputstr = "123abc";
std::string numbers{};
std::string letters{};
for(auto c : inputstr)
{
if(isdigit(c))
numbers += c;
else
letters += c;
}
reverse_str(letters); //using the emplace version
std::cout << numbers + letters;
}
推荐阅读
- sql-server - SSRS 报告的固定宽度列格式
- libcurl - libcurl 未在 OpenWrt 上将 POST 请求升级到 HTTP/2
- java - 单击可扩展列表视图中的子项时,如何从资产中获取特定的文本文件
- angular - 在Angular 6中按顺序执行http请求
- c# - 如何创建自定义导航函数 MvvmCross
- python - 类实例的 Python 平方根
- wpf - WPF使用for循环将数据从datagrid插入sql数据库
- javascript - 是否可以在外部脚本页面中安全地移动 Facebook 和 Google 的所有脚本标签?
- git - 管理 github 存储库 - 维护旧的脚本版本
- aws-cli - aws log get-log-events --log-group-name 问题