#include <iostream>
const int SIZE = 100;
using namespace std;
int main()
{
char *pStr, str[SIZE] = "", newStr[SIZE] = "", ch;
int count = 0, i = 0, j = 0;
cout << "Enter a number of mixed characters: ";
cin.getline(str, SIZE);
pStr = str;
while (*pStr != '\0')
{
if (isalnum(*pStr))
ch = toupper(*pStr);
newStr[i++] = ch;
if (*pStr = ' ')
count++;
pStr++;
}
newStr[i] = '\0';
cout << strlen(str) - strlen(newStr) << " characters were filtered out, "
<< " out of which " << count << " whitespaces were encountered.\n";
int temp;
for (i = 0; i < strlen(newStr) - 1; i++);
{
for (j = i + 1; j < strlen(newStr); j++);
{
if (newStr[j] < newStr[i]) // sorts in alphabetical
{ // and numerical order
temp = newStr[i];
newStr[i] = newStr[j];
newStr[j] = temp;
}
}
}
cout << "New sorted string: " << newStr << endl;
return 0;
}
我这里有一个代码,它应该采用输入字符串并按特定顺序打印出来并删除其他字符和空格。数字和字母应按数字和字母顺序排序。因此,如果您输入“khff&amp;%/ 321”输入,则输出应为“123FFHK”。
然而,当我尝试使用所述输入字符串的代码时,我得到的输出是“KHFFFFFF32”。我希望能提供一些关于我需要仔细研究解决问题的代码部分的技巧。
答案 0 :(得分:3)
您可以根据需要使用此代码对字符串进行排序,然后使用erase
函数去除非字母数字字符:
#include <iostream>
#include <algorithm>
#include <string>
int main() {
std::string word = "khff &%/123";
word.erase(std::remove_if(word.begin(), word.end(), [](char ch){ return !::isalnum(ch); }), word.end());
std::sort(word.begin(), word.end());
std::cout << word << '\n';
return 0;
}
答案 1 :(得分:1)
我还想指出
if (isalnum(*pStr))
ch = toupper(*pStr);
newStr[i++] = ch;
if条件中没有涵盖此列表行,并且对于每个特殊字符读取(&amp;,%,/),您将它们附加到newStr,因此您在输出中获得额外的F.You必须做类似的事情:
if (isalnum(*pStr))
{ ch = toupper(*pStr);
newStr[i++] = ch;
}
将检查你的角色是否为alnum,只在条件满足时才附加。
答案 2 :(得分:1)
以下是关于如何编写程序以使用标准库的另一种看法:
\begin{equation}
P(A \ | \ B) = \frac{P(A \ | \ B) \cdot P(A)}{P(B)}
\end{equation}