我有以下程序将字符串整数转换为整数,但如果字符串包含两个字母数字,我怎样才能转换为整数?
这是我的代码段:
#include <stdio.h>
int convstrg(const char* str) {
int output = 0;
char* p = str;
for (;;) {
char c = *p++;
if (c < '0' || c > '9') {
break;
output *= 10;
output += c - '0';
} else {
output = 0;
}
return output;
}
}
int main() {
printf("%d\n", convstrg("aaa"));
return
0; }
当输入为“100”时,我得到100作为输出,但是当它包含“a201”时,我得到空结果,而是它应该返回201并且输入任何非数字字符。感谢
答案 0 :(得分:1)
OP帖子有多个问题
if (c < '0' || c > '9') { break; ... }
肯定是错误的。
char* p = str;
应为const char* p = str;
以保持稳定。
output *= 10; output += c - '0';
需要位于包含位数的if()
。
for()
循环需要终止测试
return
需要重新安置。
...
#include <stdio.h>
int convstrg(const char* str) {
int output = 0;
// char* p = str;
const char* p = str;
// for (;;) {
for (;*p;) {
char c = *p++;
// if (c < '0' || c > '9') {
if ((c >= '0') && (c <= '9')) {
// break;
output *= 10;
output += c - '0';
}
// return output;
}
return output;
}
int main() {
printf("%d\n", convstrg("100"));
printf("%d\n", convstrg("a201"));
printf("%d\n", convstrg("20abc23"));
return 0;
}
答案 1 :(得分:0)
而不是break
,放continue
。
break
退出循环。 continue
只会让它继续下一个角色。
答案 2 :(得分:0)
你不希望return
在循环内部和else
条件。考虑到边界,这应该可以做到这一点
#include <stdio.h>
int convstrg(char* str) {
int output = 0;
char* p = str;
int i=0;
for(i=0;p[i]!='\0';i++) {
char c = *p++;
if (c < '0' || c > '9')
continue;
output *= 10;
output += c - '0';
}
return output;
}
int main(){
char x[] = "1xx2";
printf("%d\n", convstrg(x));
return 0;
}