I’m a beginner in C++ Programming language. I wanted to write a program that take the alphabets in a string array called str, and copy it in a new array called str_alpha.
And the same goes to numbers, the program copies it from str array to str_digit array.
There’s my humble code, it might be full of errors and stuff. But this is what I could do now with my very little experience.
#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;
}
And it gives my those errors :
F:\C++Progs\string\main.cpp||In function `int main()':|
F:\C++Progs\string\main.cpp|18|error: invalid conversion from `char' to `char*'|
F:\C++Progs\string\main.cpp|18|error: initializing argument 1 of `char* strcpy(char*, const char*)'|
F:\C++Progs\string\main.cpp|18|error: invalid conversion from `char' to `const char*'|
F:\C++Progs\string\main.cpp|18|error: initializing argument 2 of `char* strcpy(char*, const char*)'|
F:\C++Progs\string\main.cpp|22|error: invalid conversion from `char' to `char*'|
F:\C++Progs\string\main.cpp|22|error: initializing argument 1 of `char* strcpy(char*, const char*)'|
F:\C++Progs\string\main.cpp|22|error: invalid conversion from `char' to `const char*'|
F:\C++Progs\string\main.cpp|22|error: initializing argument 2 of `char* strcpy(char*, const char*)'|
||=== Build finished: 8 errors, 0 warnings ===|
Help me please.
Thanks in advance.
First of all, strcpy copies C strings (character arrays) not
chars. Additionally, the linesstrcpy(str_digit[i],str[i])andstrcpy(str_alpha[i], str[i])would still probably be wrong even if this wasn’t the case. Since you haven’t initialised the arrays str_digit and str_alpha, you’ll get a lot of garbage values while printing them and if any of those garbage values happen to be0x00, thecoutstatements will fail to print the whole string. As already mentioned, you really should be usingstd::stringrather thanchar[]orchar*. Having said that, here are corrected versions of your code for bothchar[]andstd::string.Using
getsis bad practice and you might consider usingstd::cininstead. And you might want to use an iterator rather than a simpleforloop.And the version using
std::string:Both versions compile without warnings on g++ 4.2.1 with
-Walland-pedantic.