簡體   English   中英

從字符串中提取字母並轉換為大寫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM