一个C面试题目

T-Quake 2013-03-21 11:20:16
最近看到一个题目:
随便输入一个字符串比如abc23dshjdj124ydus@6, 提取这个字符串中的数字,并将结果累加得出结果,此字符串就是23+124+6
请问有牛人知道该怎么解这个吗?最好能给个完整点代码,没有完整代码核心代码也行,麻烦给点简短思路或者注释
谢谢了!
int getStringNum(char* String)
...全文
287 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-03-21
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
starytx 2013-03-21
  • 打赏
  • 举报
回复
核心就是怎么找出连续的数字,找出来后接下来就是转换为数值进行相加就ok了,怎么找连续数组,可以循环判断字符串的每个字符(比较ASSIC码值是否在'0'和'9'之间),用一个标记b来记录当前是否数字,如果是就往一个临时字符数组里放,如果当前字符不是数字字符并且标志b是真那就结束临时数组的存放并转化为数字(atoi)进行累加.
恨天低 2013-03-21
  • 打赏
  • 举报
回复
引用 1 楼 liao05050075 的回复:
C/C++ code?12345678910111213int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++) if(String[i] < '0' || String[i] > '9') String[i] = ' '; ……
++ 不过题意应该不让用sscanf这些的吧。
图灵狗 2013-03-21
  • 打赏
  • 举报
回复

#include <ctype.h>
#include <string.h>
#include <stdio.h>

int get_sum_from_str(const char* str)
{
	int dflag = 0;
	char digits[11];
	char ch;
	int sum = 0;
	int i;

	while(*str)
	{
		ch = *str++;
		if(dflag)
		{
			if(isdigit(ch))
			{
				digits[i++] = ch;		
			}
			else
			{
				digits[i++] = '\0'; 
				sum += strtol(digits, NULL, 10);
				dflag = 0;
			}
		}
		else
		{
			if(isdigit(ch))
			{
				i = 0;
				digits[i++] = ch;
				dflag = 1;		
			}
		}
	}
	if(i > 0)
	{
		digits[i++] = '\0'; 
		sum += strtol(digits, NULL, 10);
	}

	return sum;
}

int main(void)
{
	printf("%d\n", get_sum_from_str("abc23dshjdj124ydus@6"));
	return 0;
}


_sunshine 2013-03-21
  • 打赏
  • 举报
回复
用strtok和atoi,楼主可以了解下
liao05050075 2013-03-21
  • 打赏
  • 举报
回复

int getStringNum(char* String) 
{
    int len = strlen(String);
    for(int i = 0; i < len; i++)
        if(String[i] < '0' || String[i] > '9') String[i] = ' ';
    
    int sum = 0;
    int num;
    while(sscanf(String, "%d", &num) == 1)
        sum += num;
   
   return sum;
}
T-Quake 2013-03-21
  • 打赏
  • 举报
回复
引用 14 楼 nickwu1220 的回复:
引用 13 楼 HellDevil 的回复:引用 10 楼 nickwu1220 的回复: C/C++ code?1234567891011121314151617181920int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++)……
正确
nickwu1220 2013-03-21
  • 打赏
  • 举报
回复
引用 13 楼 HellDevil 的回复:
引用 10 楼 nickwu1220 的回复: C/C++ code?1234567891011121314151617181920int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++) if(String[i] < '0' || ……
需要这样调用 char test[] = "abc23dshjdj124ydus@6"; int re = getStringNum(test);
T-Quake 2013-03-21
  • 打赏
  • 举报
回复
引用 10 楼 nickwu1220 的回复:
C/C++ code?1234567891011121314151617181920int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++) if(String[i] < '0' || String[i] > ……
这个方法貌似可以但是遇到一个问题就是代码走到这报错String[i] = ' ';为什么啊
T-Quake 2013-03-21
  • 打赏
  • 举报
回复
引用 10 楼 nickwu1220 的回复:
C/C++ code?1234567891011121314151617181920int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++) if(String[i] < '0' || String[i] > ……
这个方法貌似可以但是遇到一个问题就是代码走到这报错String[i] = ' ';为什么啊
prohibit 2013-03-21
  • 打赏
  • 举报
回复
1. 遍历string,不是数字的字符改成空格; 2. 累加这些空格隔开的数字;
nickwu1220 2013-03-21
  • 打赏
  • 举报
回复

int getStringNum(char* String) 
{    
	int len = strlen(String); 
	for(int i = 0; i < len; i++)     
		if(String[i] < '0' || String[i] > '9') 
			String[i] = ' ';

	char *token;
	int sum = 0;   
	int num; 

	token = strtok(String, " ");
	while(token != NULL)
	{
		num = atoi(token);
		sum += num;
		token = strtok(NULL, " ");
	}  
	return sum;
}
starytx 2013-03-21
  • 打赏
  • 举报
回复
引用 8 楼 HellDevil 的回复:
对不起我没说清楚,这道题不能使用任何str处理函数的。
引用 1 楼 liao05050075 的回复:
C/C++ code ? 1234567891011121314 int getStringNum(char* String) { int len = strlen(String); for(int i = 0; i < len; i++) if(String[i] < '0' || String[i] > '9') String[i] = ……
while会无限循环
T-Quake 2013-03-21
  • 打赏
  • 举报
回复
对不起我没说清楚,这道题不能使用任何str处理函数的。
shen_wei 2013-03-21
  • 打赏
  • 举报
回复
这个就是判断 ‘0’ -‘9’就可以了!!1楼代码不错

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧