C++ 如何对C+中的大写字母进行排序+;
我已经写了一个程序,它打算接受一个输入,并以字符升序返回输出 例如: 场景1:输入为“Hello Rohit”,该方法应返回“ehHillooRt” 场景2:给定一个输入“Hello Rohit!”,该方法应返回一条错误消息(“位置12处的无效字符”),指定第一次出现的字符和无效字符的位置C++ 如何对C+中的大写字母进行排序+;,c++,string,sorting,c++11,C++,String,Sorting,C++11,我已经写了一个程序,它打算接受一个输入,并以字符升序返回输出 例如: 场景1:输入为“Hello Rohit”,该方法应返回“ehHillooRt” 场景2:给定一个输入“Hello Rohit!”,该方法应返回一条错误消息(“位置12处的无效字符”),指定第一次出现的字符和无效字符的位置 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <bits/stdc++.h&
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
int i, count, n;
cout << "Enter a sentence : ";
getline(cin, str);
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == ' ')
count++;
}
string strWords[count + 1];
short counter = 0;
for (short i = 0; i < str.length(); i++) {
if (str[i] == ' ') {
counter++;
i++;
}
strWords[counter] += str[i];
}
for (i = 0; i < strWords[i].length(); i++) {
string temp = strWords[i];
sort(temp.begin(), temp.end());
cout << temp << " ";
}
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串str;
int i,计数,n;
cout您可以使用和,其中使用小写()
在终端中。请注意,该空间在所有删除器前面排序。若要删除该空间,可以使用以下代码行进行删除:
str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char x) { return std::isspace(x); }), str.end());
如果还要检查不需要的元素,可以使用:
std::vector<std::string> unwanted_elements{ "!" }; // Coma separed list of strings that you don't want in the input. Note that this are full strings so you could also reject "Hello" for instance.
for (size_t i = 0; i < unwanted_elements.size(); ++i)
{
size_t idx = str.find(unwanted_elements[i]);
if (idx != std::string::npos)
{
std::cout << "Unwnated element " << unwanted_elements[i] << " at position " << idx << std::endl;
}
}
std::vector不需要的_元素{“!”};//输入中不需要的字符串的红色列表。请注意,这是完整字符串,因此您也可以例如拒绝“Hello”。
对于(size_t i=0;i<不需要的_元素。size();++i)
{
size_t idx=str.find(不需要的元素[i]);
if(idx!=std::string::npos)
{
std::请确定缩进(做缩进)和垂直间距(不需要所有垂直间距)它会使代码更容易阅读。与你的问题无关,但请花些时间阅读,同时注意C++没有。使用问题代替。问题陈述不要求将输入分成单词。例如:代码>“你好RoHIT”->“EHILLORORT”< /C>显然忽略了单词边界。(注意两个o
s在输出中是如何结合在一起的)。大约五分之四的代码专用于拆分成单词。请花一些时间刷新。您显示的代码有什么问题?对于您给出的输入示例,实际输出是什么?当您构建或运行程序时会发生什么?您是否尝试在debu中逐语句地逐条检查代码语句gger?lambda可以很容易地写成:return std::tolower(a)
No,那么大写字母就不会出现在小写字母后面(这是他的例子:Hello Rohit->ehHillooRt)这是真的,但请注意,您假设在字符集的排序顺序中,小写字符跟随大写字符,如果使用另一个字符集,情况并不总是如此。您应该在回答中指出这一点。我没有跟着您。您是指用户输入的字符序列吗(即<代码> STD::字符串STR <代码>)或表示它的数值?我总是假设C++中的字符比较是使用字符值来完成的。小于小写。只要您使用std::
函数进行字符确定,您的解决方案就是可移植的。一旦您通过严格比较(即a>b
)假设字符a大于字符b,您就可以使解决方案不可移植。别误会,您的解决方案适用于ASCII,但可能不适用于其他字符集(如EBCDIC)
str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char x) { return std::isspace(x); }), str.end());
std::vector<std::string> unwanted_elements{ "!" }; // Coma separed list of strings that you don't want in the input. Note that this are full strings so you could also reject "Hello" for instance.
for (size_t i = 0; i < unwanted_elements.size(); ++i)
{
size_t idx = str.find(unwanted_elements[i]);
if (idx != std::string::npos)
{
std::cout << "Unwnated element " << unwanted_elements[i] << " at position " << idx << std::endl;
}
}
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::string str;
std::cout << "Enter a sentence : ";
getline(std::cin, str);
std::vector<std::string> unwanted_elements{ "!" }; // Coma separed list of strings that you don't want in the input. Note that this are full strings so you could also reject "Hello" for instance.
for (size_t i = 0; i < unwanted_elements.size(); ++i)
{
size_t idx = str.find(unwanted_elements[i]);
if (idx != std::string::npos)
{
std::cout << "Unwnated element " << unwanted_elements[i] << " at position " << idx << std::endl;
return -1;
}
}
str.erase(std::remove_if(str.begin(), str.end(), [](unsigned char x) { return std::isspace(x); }), str.end());
std::sort(str.begin(), str.end(), [](const char& a, const char& b) {
if (std::tolower(a) == std::tolower(b))
return a > b;
else
return std::tolower(a) < std::tolower(b);
});
std::cout << str << std::endl;
return 0;
}