Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对C+中的大写字母进行排序+;_C++_String_Sorting_C++11 - Fatal编程技术网

C++ 如何对C+中的大写字母进行排序+;

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&

我已经写了一个程序,它打算接受一个输入,并以字符升序返回输出

例如:

场景1:输入为“Hello Rohit”,该方法应返回“ehHillooRt”

场景2:给定一个输入“Hello Rohit!”,该方法应返回一条错误消息(“位置12处的无效字符”),指定第一次出现的字符和无效字符的位置

#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;
}