How to validate an integer properly in C++? [duplicate] - c++

This question already has answers here:
How to determine if a string is a number with C++?
(36 answers)
How to convert a command-line argument to int?
(8 answers)
Closed 9 years ago.
I want to validate the input by user to make sure it's an integer (fully). I've tried a few methods, like !cin, but none of them work properly..
Most of methods fail to validate input like this:
32tgf
When there is a number first and then letters, it doesn't fail, but it takes it as valid entry..
Note: It's a project for college and it's specified that the variable should be of type int.

Read into a string, then use e.g. std::stoi or std::strtol to both convert to an integer and validate the input.
Or read into a string, put that string in a std::istringstream which you use to extract the integer. Then check if there's anything more in the istringstream.
I'd recommend the first method though.

Related

Using The va_list to generate a string [duplicate]

This question already has answers here:
Variable number of arguments in C++?
(17 answers)
Variable number of parameters in function in C++
(8 answers)
Closed 3 years ago.
Im using c++ to create a custom monitor using the lvgl library. So ive saw that the "..." can handle infinite variables. I wanted to create a function to convert the string and the following parameters into a pure string. I want the function to take in a character pointer, then the "...". I want it to take out the "%d" parts of the character pointer and replace it with the corresponding value in the va_list. If the va_list is empty, it can return the same character pointer. How can I achieve this? i have no knowledge about the "...", i only know they are called varidic functions.
Thanks all for your kind help!

In C++, how do I take a string formatted like "######" and store each character as an integer? [duplicate]

This question already has answers here:
Convert char to int in C and C++
(14 answers)
Closed 7 years ago.
My function takes a large number as input, in the form of a string. I need to store each number in an integer array, but have been unable to do so. When I do a for loop and make array[i] = string[i], it saves the number as its ascii value. I've been trying to convert this number from its ascii value to an integer, but I cant get atoi to work. Any suggestions?
Since the numerals '0'-'9' are required to be encoded consecutivly in base character set, the numeric value of a numeral character c is simply c - '0'.

Validation of input Procedural C++ [duplicate]

This question already has answers here:
How do I iterate over the words of a string?
(84 answers)
Closed 8 years ago.
I need some tips on an assignment that I am currently working on. I need to create a program for converting time specs (n1y n2n n3d n4h n5m n6s -- note the amount of whitespace can vary between the different inputs) to seconds. One of the functions that I need to create is a function to validate the time spec input (as a const char*). The function header looks as follows:
// is_legal_time_spec:
// Checks if ctime_spec is a valid time spec
// In:
// ctime_spec != NULL
// Out:
// return -- true if the ctime_spec is a valid time spec
// false if otherwise
bool is_legal_time_spec( const char *ctime_spec ) {
return false;
}
Ive had some ideas about how to use the strpbrk(3) function for this, but I was wondering if there is another easier function that I can use to check the format of the time spec input.
Thanks in advance for your help.
Use strtok to break string into words, and then validate each words separately by parsing it or using sscanf. Then do simple mathematics to convert into time specs into seconds

Input of integer in the range of 10^1000 [duplicate]

This question already has answers here:
Handling large numbers in C++?
(10 answers)
Closed 8 years ago.
Is it possible to take an input of range greater than what C/C++ provides? Is it possible to accept an input range greater than that of unsigned long long and even larger up to the range of 10^1000?
If it is possible in C/C++, please answer how it can be done, thanks.
There's no bigint in C or C++, however library like this one can provide it: https://code.google.com/p/infint/
Input into a string. Then convert the string into the desired type.
If you use a library that provides types for large integers, such a library might also offer input functions.

C++: Comparing two strings [duplicate]

This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
comparing two strings with comma seperated values
I am working in C++, where I have two strings:
string str1 = "1,4,8,",
str2 = "4,1,8,";
Both strings contains comma separated values. Now I just want to check whether all the elements in str1 also exist in str2, regardless of their position. Is there any direct way to check this? Do I need to write custom code for this?
As far as C++ is concerned, those strings are just sequences of characters. If you apply meaning to those characters (such as "comma separated values"), then you'll have to write some code to extract the data and deal with it.
I would do something like:
split the string on ','
convert each sequence of digits into an integer (skipping over empty elements)
insert those integers into a set (one for each input string)
compare the sets
It's up to you to determine what kind of integer to use.
Yes, you need to write custom code, although not a lot of it. Once you figure out the algorithm you can post here if you have further questions on how to implement each part.