Checking if a string is a valid number (no letters at all)
So I wrote a function that checks whether or not a string has a numeric character. Even if there is just 1 letter in a group of numbers, it should return false. However it doesn't. I'm not sure if loops work differently in C++ or not.
bool isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return false;
break;
}
}
return true;
}
c++ visual-c++
|
show 1 more comment
So I wrote a function that checks whether or not a string has a numeric character. Even if there is just 1 letter in a group of numbers, it should return false. However it doesn't. I'm not sure if loops work differently in C++ or not.
bool isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return false;
break;
}
}
return true;
}
c++ visual-c++
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
@LajosArpad Isn'tisdigit
defined understd::
? It basically checks if a char is within[0-9]
.
– TrebuchetMS
Nov 22 at 18:35
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
@Srikan "Try to cast to int and check if it works" - excuse me? Castingchar
toint
will always work
– Fureeish
Nov 22 at 22:33
1
It should be either!isdigit( (unsigned char)str[i] )
or!std::isdigit(str[i], std::locale())
Theis
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.
– M.M
Nov 22 at 23:01
|
show 1 more comment
So I wrote a function that checks whether or not a string has a numeric character. Even if there is just 1 letter in a group of numbers, it should return false. However it doesn't. I'm not sure if loops work differently in C++ or not.
bool isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return false;
break;
}
}
return true;
}
c++ visual-c++
So I wrote a function that checks whether or not a string has a numeric character. Even if there is just 1 letter in a group of numbers, it should return false. However it doesn't. I'm not sure if loops work differently in C++ or not.
bool isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return false;
break;
}
}
return true;
}
c++ visual-c++
c++ visual-c++
edited Nov 22 at 22:31
TrebuchetMS
1,9871619
1,9871619
asked Nov 22 at 18:11
BobTheTreeGod
31
31
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
@LajosArpad Isn'tisdigit
defined understd::
? It basically checks if a char is within[0-9]
.
– TrebuchetMS
Nov 22 at 18:35
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
@Srikan "Try to cast to int and check if it works" - excuse me? Castingchar
toint
will always work
– Fureeish
Nov 22 at 22:33
1
It should be either!isdigit( (unsigned char)str[i] )
or!std::isdigit(str[i], std::locale())
Theis
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.
– M.M
Nov 22 at 23:01
|
show 1 more comment
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
@LajosArpad Isn'tisdigit
defined understd::
? It basically checks if a char is within[0-9]
.
– TrebuchetMS
Nov 22 at 18:35
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
@Srikan "Try to cast to int and check if it works" - excuse me? Castingchar
toint
will always work
– Fureeish
Nov 22 at 22:33
1
It should be either!isdigit( (unsigned char)str[i] )
or!std::isdigit(str[i], std::locale())
Theis
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.
– M.M
Nov 22 at 23:01
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
@LajosArpad Isn't
isdigit
defined under std::
? It basically checks if a char is within [0-9]
.– TrebuchetMS
Nov 22 at 18:35
@LajosArpad Isn't
isdigit
defined under std::
? It basically checks if a char is within [0-9]
.– TrebuchetMS
Nov 22 at 18:35
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
@Srikan "Try to cast to int and check if it works" - excuse me? Casting
char
to int
will always work– Fureeish
Nov 22 at 22:33
@Srikan "Try to cast to int and check if it works" - excuse me? Casting
char
to int
will always work– Fureeish
Nov 22 at 22:33
1
1
It should be either
!isdigit( (unsigned char)str[i] )
or !std::isdigit(str[i], std::locale())
The is
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.– M.M
Nov 22 at 23:01
It should be either
!isdigit( (unsigned char)str[i] )
or !std::isdigit(str[i], std::locale())
The is
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.– M.M
Nov 22 at 23:01
|
show 1 more comment
1 Answer
1
active
oldest
votes
#include <iostream>
#include <string>
using namespace std;
int isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return 0;
break;
}
}
return 1;
}
int main()
{
cout << isStringAValidNumber("1sd2345");
cout << endl;
cout << isStringAValidNumber("1s2345");
cout << endl;
cout << isStringAValidNumber("12345");
}
works just fine...
the return is:
0
0
1
Compile Online
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436314%2fchecking-if-a-string-is-a-valid-number-no-letters-at-all%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
#include <iostream>
#include <string>
using namespace std;
int isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return 0;
break;
}
}
return 1;
}
int main()
{
cout << isStringAValidNumber("1sd2345");
cout << endl;
cout << isStringAValidNumber("1s2345");
cout << endl;
cout << isStringAValidNumber("12345");
}
works just fine...
the return is:
0
0
1
Compile Online
add a comment |
#include <iostream>
#include <string>
using namespace std;
int isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return 0;
break;
}
}
return 1;
}
int main()
{
cout << isStringAValidNumber("1sd2345");
cout << endl;
cout << isStringAValidNumber("1s2345");
cout << endl;
cout << isStringAValidNumber("12345");
}
works just fine...
the return is:
0
0
1
Compile Online
add a comment |
#include <iostream>
#include <string>
using namespace std;
int isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return 0;
break;
}
}
return 1;
}
int main()
{
cout << isStringAValidNumber("1sd2345");
cout << endl;
cout << isStringAValidNumber("1s2345");
cout << endl;
cout << isStringAValidNumber("12345");
}
works just fine...
the return is:
0
0
1
Compile Online
#include <iostream>
#include <string>
using namespace std;
int isStringAValidNumber(string str)
{
for (int i = 0; i < str.length(); i++) {
if (!isdigit(str[i])) {
return 0;
break;
}
}
return 1;
}
int main()
{
cout << isStringAValidNumber("1sd2345");
cout << endl;
cout << isStringAValidNumber("1s2345");
cout << endl;
cout << isStringAValidNumber("12345");
}
works just fine...
the return is:
0
0
1
Compile Online
edited Nov 22 at 23:15
answered Nov 22 at 22:46
Alireza Tbp
356
356
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436314%2fchecking-if-a-string-is-a-valid-number-no-letters-at-all%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can you show the definition of isdigit?
– Lajos Arpad
Nov 22 at 18:26
@LajosArpad Isn't
isdigit
defined understd::
? It basically checks if a char is within[0-9]
.– TrebuchetMS
Nov 22 at 18:35
You are going to get a reference from str[i]. Try to cast to int and check if it works. Dont need the break after false
– Srikan
Nov 22 at 18:48
@Srikan "Try to cast to int and check if it works" - excuse me? Casting
char
toint
will always work– Fureeish
Nov 22 at 22:33
1
It should be either
!isdigit( (unsigned char)str[i] )
or!std::isdigit(str[i], std::locale())
Theis
function family are quirky due to history of being imported from the C language. Also this will not work for UTF-8 strings obviously. If you are still having trouble please post MCVE that shows unexpected output.– M.M
Nov 22 at 23:01