C语言中怎么提取字符串中的整数并求和? C语言:将字符串中的正、负整数取出求和
c\u8bed\u8a00\u5982\u4f55\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32\u4e2d\u7684\u6570\u5b57\u63d0\u53d6\u6c42\u548c..\u4f8b\u5982:12GDPs5.ghgggh62sfhhh\u4e2d\u768412 5 62\u6c42\u548c\uff1f
\u662f\u8fd9\u6837\u7684\u7ed3\u679c\u5417\uff1f\u5c06\u8fde\u7eed\u7684\u6570\u770b\u6210\u662f\u4e00\u7ec4\u6570\u5b57\uff0c\u5c06\u6bcf\u7ec4\u6570\u5b57\u76f8\u52a0
\u6211\u7684\u7f16\u8bd1\u73af\u5883\u662fC89\u6807\u51c6\uff0c\u6ca1\u6709bool\u578b\uff0c\u6240\u4ee5\u6211\u76f4\u63a5\u91cd\u65b0\u5b9a\u4e49\u4e86\u7684int\u578b\u7684inNumber\uff0c\u601d\u8def\u662f\u4e00\u6837\u7684\u3002
#include#includeint sumInt(char *s){ int sum=0,t=0; char *p=s; int inNumber=0; //\u6211\u628ainNumber\u4f5c\u4e3a\u8d1f\u6570\u6807\u8bb0 //\u5c06\u5b57\u7b26\u4e32\u4e2d\u7684\u6b63\u3001\u8d1f\u6574\u6570\u53d6\u51fa\u6c42\u548c while(*(p-1)!='\0') //\u4fdd\u8bc1\u53ef\u4ee5\u628a\u6700\u540e\u7684\u6570\u5b57\u4e5f\u53d6\u5230 { if('0'<=*p&&*p<='9') //\u662f\u6574\u6570\uff0c\u628a\u8fd9\u4e2a\u6570\u5b58\u5230t\u4e2d { t=10*t+*p-48; // t*10\u76f8\u5f53\u4e8e\u8fdb\u4f4d -48\u662f\u628a \u5b57\u7b26'0'\u5230'9'\u8f6c\u6362\u4e3a\u6570\u5b570\u52309 if(*(p-1)=='-') //\u5982\u679c\u662f\u8d1f\u6570 inNumber=1; } else //\u4e0d\u662f\u6570\uff0c\u5c31\u628a\u524d\u9762\u7684t\u52a0\u5230sum\u4e2d\uff0c\u5e76\u628at\u6e05\u96f6 { if(inNumber==1) //\u662f\u8d1f\u6570 t=-t; sum=sum+t; t=0; inNumber=0; } p++; } return sum;}
int main(){ char s[1000+1]; gets(s); printf("%d\n",sumInt(s)); return 0;
}
\u5982\u679c\u6309\u539f\u9898\u7684\u8bdd\uff0c\u57282\u4e2a\u6ce8\u91ca\u4e2d\u95f4\u53ef\u52a0\u4ee3\u7801\uff1a
while(*(p-1)!='\0') { if('0'<=*p&&*p<='9') { t=10*t+*p-48; if(*(p-1)=='-') inNumber=true; } else { if(inNumber=true) t=-t; sum=sum+t; t=0; inNumber=false; } p++; }
\u4f60\u53ef\u4ee5\u5728
sum=sum+t;
\u8fd9\u91cc\u52a0\u4e00\u53e5
printf("%d\n",t);
\u89c2\u5bdft\u7684\u503c\u53d8\u5316\uff0c\u53ef\u4ee5\u66f4\u597d\u7684\u7406\u89e3\u8fd0\u884c\u8fc7\u7a0b\u3002
int main()
{
int sum =0;
int flag = 0;
char str[100];
cout << "输入字符串:";
cin >> str;
int len = strlen(str);
cout << str << endl;
char temp[100];
memset(temp, 0, sizeof(temp));
int n=0;
for (int i=0; i<len; i++ )
{
if (str[i]>='0' && str[i] <= '9')
{
temp[n] = str[i];
n++;
flag =1;
}
else
{
if (flag == 1)
{
temp[n] ='\0';
cout << temp << endl;
sum += atoi(temp);
}
memset(temp, 0, sizeof(temp));
flag =0;
n=0;
}
}
cout << sum << endl;
return 0;
}
你确定你的这段代码
#include<iostream>
using namespace std;
int main()
{cout<<"hjk"<<endl;
getchar();
getchar();
return 0;
}
是必须要加两个 getchar才能实现输出
一般来说getchar 只会影响到输入流,你的代码没有输入,加不加getchar实际上时不会影响到程序,如上所说我们在return 0;前加入getchar():是为了能让我们能看到输出结果(避免控制台窗口一闪而过) 如果你的代码还存在着输入语句,getchar还有一个作用就是吃掉回车键字符以避免之后所带来的输入错误,不过在c++中一般不用这个, 如果只是为了清空缓存的话, c++用cin.clear()就能清空输入流缓存。
如果你的必须要加入两个getchar才能避免输入框消失,那第一个getchar的作用应该就是吃掉回车,清空缓存。第二个getchar的作用就是避免那个一闪
先需要明确输入数据的格式是不是固定的,如果不是固定的要看有没有特征或规律,像你这个例子那3个100怎么不提取?
明确了要求后可以通过字符串搜索或token或正则表达式来进行数据提取
#include <stdio.h>
int main(void)
{
char str[128];
int a = 0, flag = 0, sum = 0, i = 0;
gets(str);
while (str[i++]);
str[i] = '\0';
str[--i] = '\n';
for(i = 0; str[i]; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
flag = 1;
a = a * 10 + str[i] - 48;
}
else if (flag == 1)
{
sum += a;
flag = 0;
a = 0;
}
}
printf("%d\n", sum);
return 0;
}
用了scanf的
以试过,可行
#include <stdio.h>
void main()
{
char str[100];
char buf[10];
int i;
int n = 0;
bool flag = 0;
int j = 0;
//gets(str);
scanf("%s", str);
for (i = 0; i != strlen(str); ++ i)
{
if (str[i] >= '0' && str[i] <= '9')
{
buf[j] = str[i];
j++;
flag = 1;
}
else if (flag)
{
n += atoi(buf);
flag = 0;
j = 0;
}
}
printf("%d\n", n);
}
绛旓細浣跨敤isdigit()鍑芥暟銆傚湪C璇█涓紝鍙互浣跨敤鏍囧噯搴撳嚱鏁癷sdigit()鏉ユ鏌ヤ竴涓瓧绗︽槸鍚︿负鏁板瓧銆俰sdigit()鍑芥暟瀹氫箟鍦ㄥご鏂囦欢ctype.h涓紝鍘熷瀷鏄痠ntisdigit(intc)銆
绛旓細1銆佺‘瀹氱▼搴忕粨鏋 绋嬪簭闇瑕佷袱灞傚惊鐜祵濂楋紝璇诲彇repeat鍚庤繘鍏ョ涓灞傚惊鐜紝绗竴娆″惊鐜敤浜庣‘瀹氳鍙栫殑瀛楃涓叉暟锛岀浜屽眰寰幆鐢ㄤ簬璇诲彇瀛楃鍜屼慨姝f暟鎹傜▼搴忔鍥惧涓嬪浘鎵绀:2銆佺‘璁ょ▼搴忎娇鐢ㄥ彉閲忓強绫诲瀷 鏍规嵁绋嬪簭闇姹傚彲浠ョ‘瀹氭墍闇鍙橀噺鍙婄被鍨嬶紙濡備笅鍥炬墍绀猴級锛屾澶勫簲娉ㄦ剰閫氳繃寰幆璇诲彇瀛楃骞跺悓姝ョ粺璁★紝鏁呬粎闇瑕佷娇鐢ㄤ竴涓猚h...
绛旓細1銆侀鍏堟墦寮visual studio杞欢骞跺垱寤轰竴涓柊鐨c璇█鏂囦欢锛屽涓嬫墍绀恒2銆佺劧鍚庡鍏C璇█鏂囦欢椤堕儴鐨勫簱鍐呭锛屽涓嬫墍绀恒3銆佺劧鍚庝娇鐢╯canf鍑芥暟鎺ユ敹鐢ㄦ埛杈撳叆鐨瀛楃涓銆4銆佺劧鍚庝娇鐢╬rintf鍑芥暟鎵撳嵃鐢ㄦ埛杈撳叆銆5銆佽繍琛岀▼搴忓悗锛屽脊鍑轰笅鍥炬墍绀虹殑鍛戒护鐣岄潰锛岃嚜鍔ㄦ帴鏀惰緭鍏ュ唴瀹癸紝鎸夊師鏍疯緭鍑恒6銆佹渶鍚庯紝濡傛灉鎺ユ敹鍒板叾浠栫被鍨嬶紝渚嬪...
绛旓細intmain(){ intz=0;intt,i;int*p;intm=0;ints=0;chara[10];//杈撳叆涓涓瓧绗︿覆鍒癮[6]printf("璇疯緭鍏ヤ竴涓瓧绗︿覆\n");scanf("%s",a);//杈撳叆瀛楃涓 for(i=0;i<10;i++)//璁$畻a[6]涓殑鏁板瓧涓暟 { if(a[i]>='0'&&a[i]<='9')m++;} if(m==0)printf("瀛楃涓蹭腑娌℃湁鏁...
绛旓細c[len] = '\0';num = atoi(c);//灏瀛楃涓杞寲涓烘暟瀛 b[k++] = num; //鐢ㄦ暟缁勫瓨鏀炬埅鍙栦笅鏉ョ殑鏁板瓧 flag = 0;// 鏍囪瘑0浠h〃杩涘叆浜嗛潪鏁板瓧瀛楃 len = 0;} } clen = k;} void main (void){ char a[M];int b[M];//鐢ㄦ潵瀛樻斁浠庡瓧绗︿覆鎴彇涓嬫潵鐨勬暟瀛 int i = 0;int k ;print...
绛旓細printf("璇疯緭鍏瀛楃涓1:(杈撳叆?缁撴潫)");//杈撳叆?浣滀负瀛楃涓1鐨勭粨鏉熺 while(x!='?') { x=getchar(); if(x=='?') break; input1=x; if(input1>='0'&&input1<='9')//姣忔鏌ュ埌涓涓暟瀛楀氨瑕佷箻10,杩涗竴浣 number1=number1*10+input1-'0';//姣斿瀛楃'9'-'0'涔嬪悗鐨勬暟鏄暟瀛9 } x...
绛旓細鐢↗Query鍐 function QueryStr(split) { split = split.split('.');var result = split[1];return result;} (function () { alert(QueryStr("www.baidu.com"));});浼氬脊鍑 鐢ˋsp.Net 鍐 string url = "www.baidu.com";string[] split = url.Split('.');string result = split[1]...
绛旓細瀛楃涓杞鏁存暟鍙互鏈変袱绉嶆柟娉曪細1.浣跨敤c璇█鑷甫鐨勫簱鍑芥暟锛歛toi銆傚嚱鏁板師鍨嬶細int atoi(const char *nptr);鍔熻兘锛氭妸瀛楃涓茶浆鎴鏁村瀷鏁銆備緥濡傦細include <stdlib.h>#include <stdio.h> int main(void){ int n; char *str = "12345"; n = atoi(str); printf("int=%d\n",n); r...
绛旓細c璇█涓锛屽彲浠ヤ娇鐢╝toi()鍑芥暟灏瀛楃涓杞寲鎴鏁存暟鍨嬪苟杈撳嚭銆俛toi (琛ㄧず ascii to integer)鏄妸瀛楃涓茶浆鎹㈡垚鏁村瀷鏁鐨勪竴涓嚱鏁帮紝搴旂敤鍦ㄨ绠楁満绋嬪簭鍜屽姙鍏蒋浠朵腑銆俰nt atoi(const char *nptr) 鍑芥暟浼氭壂鎻忓弬鏁 nptr瀛楃涓诧紝浼氳烦杩囧墠闈㈢殑绌虹櫧瀛楃锛堜緥濡傜┖鏍硷紝tab缂╄繘锛夌瓑銆傚鏋 nptr涓嶈兘杞崲鎴 int 鎴栬 nptr...
绛旓細娌℃湁瑕佹眰璇诲嚭鏉ユ斁鍦ㄥ摢閲岋紝鎵浠ヤ互鏄剧ず鍦ㄥ睆骞曚笂涓轰緥銆傝鏂囦欢鍚嶄负123.txt骞跺湪褰撳墠鐩綍涓嬶紝缂栫▼濡備笅锛//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#include "stdlib.h"int main(void){ FILE *fp; int x; if((fp=fopen("123.txt","r"))==NULL)...