这是一个C ++程序,用于接受所有字符但只输出字母的字符串;如果字母是小写的,那么我们应该把它们做成大写。
#include<iostream>
#include<cstdlib>
#include<cctype>
#include <iomanip>
#include <cstring>
using std :: cin;
using std :: cout;
using std :: endl;
using std::setw ;
const int MAX_STR_LEN=100;
int main()
{
char str1 [MAX_STR_LEN];
int i;
cin >> setw(MAX_STR_LEN) >> str1;
for (int i=0; i <MAX_STR_LEN; i++)
{
if (isalpha(str1[i])) {
if (str1[i]>='A'&& str1[i]<= 'Z')
cout << str1[i];
if (str1[i]>='a'&& str1[i]<= 'z')
{
str1[i]= toupper(str1 [i]);
cout << str1[i];
}
}
}
return EXIT_SUCCESS;
}
这往往工作正常,但给出了额外的字母,好像我
俯视某事。此外,当我只输入它给出的数字时
像PHUYXPU
这样的字母,我没有输入的东西。
答案 0 :(得分:2)
for (int i=0; i <MAX_STR_LEN; i++)
这意味着您将迭代数组的所有100个单元格,而不管字符串的长度如何。您应该在cin语句之前初始化数组,如:
for(i=0;i<MAX_STR_LEN;i++)
str1[i] = '\0';
或替换for循环中的条件,只迭代数组的长度,如:
for(int i=0;i<strlen(str1);i++) {
//blah blah blah
答案 1 :(得分:1)
在C ++中,你可以在没有原始循环的情况下做很多事情,试试这个:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct to_upper {
char operator()(char c) { return toupper((unsigned char)c); }
};
int main(int argc, const char * argv[]) {
string letters, input;
cout << "Enter your name: ";
getline(cin, input);
copy_if(begin(input), end(input), back_inserter(letters), ::isalpha);
transform(begin(letters), end(letters), begin(letters), to_upper());
cout << letters << endl;
}
结果:
输入您的姓名:m1ar7ko0
MARKO
答案 2 :(得分:-1)
如果我做对了你不需要isalpha()函数,你已经删除了数字和符号以及后续的if(str1 [i]&gt; =&#39; A&#39;&amp; ;&amp; str1 [i]&lt; =&#39; Z&#39;)和if(str1 [i]&gt; =&#39; a&#39;&amp;&amp; str1 [i]&lt; =&## 39; Z&#39)
。