无效的字符到字符的转换*-正在将字符串数组中的字符复制到另一个字符串数组 我是C++编程初学者。我想写一个程序,在一个名为str的字符串数组中获取字母,并将其复制到一个名为str_alpha的新数组中

无效的字符到字符的转换*-正在将字符串数组中的字符复制到另一个字符串数组 我是C++编程初学者。我想写一个程序,在一个名为str的字符串数组中获取字母,并将其复制到一个名为str_alpha的新数组中,c++,C++,数字也是一样,程序将它从str数组复制到str_数字数组 这是我简陋的代码,可能充满了错误和东西。但这正是我现在用很少的经验所能做到的 #include <iostream> #include <cstdio> #include <cstring> #include <cctype> using namespace std; char str[100], str_alpha[100], str_digit[100]; int main() {

数字也是一样,程序将它从str数组复制到str_数字数组

这是我简陋的代码,可能充满了错误和东西。但这正是我现在用很少的经验所能做到的

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>

using namespace std;

char str[100], str_alpha[100], str_digit[100];

int main()
{
    gets(str);

    for (int i=0 ; str[i] ; i++)
    {
        if (isalpha(str[i]))
        {
            strcpy (str_alpha[i] , str[i]);
        }
        else if (isdigit(str[i]))
        {
            strcpy (str_digit[i] , str[i]);
        }
    }

    cout << "Alpha is " << str_alpha << endl ;
    cout << "Number is : " << str_digit << endl ;

    return 0;
}
请帮帮我。 提前谢谢

我是C++编程初学者。

请勿使用
char*
等;使用C++预定义类型,在您的情况下<代码>字符串< /代码>:

string str;
cin >> str;

string alpha;
string digit;

for (unsigned int i = 0; i < str.length(); ++i) {
    char chr = str[i];
    if (isalpha(chr))
        alpha.push_back(chr);
    else if (isdigit(chr))
        digit.push_back(chr);
}
//using std::string
#include <iostream>

using namespace std;

int main()
{
    string str, str_alpha , str_digit;

    cin >> str ;

    for (string::iterator it = str.begin();it<str.end();it++)
    {
        if(isalpha(*it))
        {
            str_alpha += *it;
        }
        else if (isdigit(*it))
        {
            str_digit += *it;
        }
    } 

    cout << "Alpha is " << str_alpha << endl ;
    cout << "Number is : " << str_digit << endl ;

    return 0;
}
string-str;
cin>>str;
字符串alpha;
字符串数字;
for(无符号整数i=0;i

此外,正如名字所说,
strcpy
用于复制字符串,而不是单个
char
s。您可以通过指定它们来直接复制它们。不需要函数调用。

strcpy
复制整个字符串。使用普通赋值(=运算符)复制字符。

您正在复制字符,即使strcpy设计用于复制字符串(字符数组)。因此,编译器会抱怨,因为您提供的是“char”而不是“char*”。如果要复制字符,只需执行以下操作:

str_alpha[i] = str[i];

问题在于
strcpy
旨在复制整个字符串。在本例中,您复制的是单个字符,而不是整个字符串。对于单个字符,可以使用简单的赋值

不过,还有一些事情需要处理。首先,你有:

char-str[100]

在任何功能之外。它定义了一个包含100个字符的数组,并将所有字符初始化为0。然后循环查找这些字符,尝试查找分类为字母或数字的字符——这是永远不会发生的,因为零字节('\0',而不是'0')从来都不是一个

事实上,据我所知,你根本不需要
str
。你(显然)想要的大致是:

for (i in 0 to 127)
   if (alpha(i))
       add i to str_alpha
   else if (digit(i))
       add i to str_digit

正如Konrad Rudolph已经指出的,将str_digit和str_alpha转换为std::string可能比char数组要好得多。数组可以完成这项工作,但要想真正做到正确,需要做更多的工作。

首先,strcpy复制的是C字符串(字符数组),而不是字符。此外,即使不是这样,行
strcpy(str_digit[i],str[i])
strcpy(str_alpha[i],str[i])
也可能是错误的。由于尚未初始化数组str_digit和str_alpha,因此在打印它们时会得到大量垃圾值,如果这些垃圾值中的任何一个恰好是
0x00
,则
cout
语句将无法打印整个字符串。如前所述,您确实应该使用
std::string
而不是
char[]
char*
。话虽如此,以下是您的
char[]
std::string
代码的正确版本

使用<代码>获取是不好的练习,您可以考虑使用<代码> STD::CIN < /Cord>。对于循环,您可能希望使用迭代器而不是简单的

//using char[]
#include <iostream>

using namespace std;

int main()
{
    char str[100] , str_alpha[100] , str_digit[100] ;
    int alpha_counter=0, digit_counter=0;

    cin.get(str, 99);

    for (int i=0 ; str[i] ; i++)
    {
        if(isalpha(str[i]))
        {
            str_alpha[alpha_counter] = str[i];
            alpha_counter++;
        }
        else if (isdigit(str[i]))
        {
            str_digit[digit_counter] = str[i];
            digit_counter++;
        }
    } 
    str_alpha[alpha_counter] = 0;
    str_digit[digit_counter] = 0;

    cout << "Alpha is " << str_alpha << endl ;
    cout << "Number is : " << str_digit << endl ;

    return 0;
}
这两个版本在g++4.2.1上编译时都没有警告,带有
-Wall
-pedantic

//using std::string
#include <iostream>

using namespace std;

int main()
{
    string str, str_alpha , str_digit;

    cin >> str ;

    for (string::iterator it = str.begin();it<str.end();it++)
    {
        if(isalpha(*it))
        {
            str_alpha += *it;
        }
        else if (isdigit(*it))
        {
            str_digit += *it;
        }
    } 

    cout << "Alpha is " << str_alpha << endl ;
    cout << "Number is : " << str_digit << endl ;

    return 0;
}