[英]Extract letters from a string and convert to upper case?
這是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
字母,而我沒有輸入。
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
在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
如果我做對了,則不需要isalpha()函數,那么您已經在刪除數字和符號以及后續的if(str1 [i]> ='A'&& str1 [i] <='Z')和if(str1 [i]> ='a'&& str1 [i] <='z')。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.