C 从字符串中提取字母和数字
我在布置作业时遇到了一些困难,不知道是否能得到一些帮助。。 无论如何,任务是:“你必须从键盘上输入随机的字母和数字。应该从程序中分析字符串,然后必须提取所有数字,并将它们相加。 e、 g.输入:asd-12sdf45-56asdf100输出:77C 从字符串中提取字母和数字,c,C,我在布置作业时遇到了一些困难,不知道是否能得到一些帮助。。 无论如何,任务是:“你必须从键盘上输入随机的字母和数字。应该从程序中分析字符串,然后必须提取所有数字,并将它们相加。 e、 g.输入:asd-12sdf45-56asdf100输出:77 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> int main() { char
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
int main() {
char stringText[50];
char arraySaver[50];
int i=0, j=0, k=0;
printf("Enter String: ");
scanf("%s", &stringText);
for(i=0; i<strlen(stringText); i++) {
if(isdigit(stringText[i])) {
arraySaver[j]=stringText[i];
j++;
}
}
system("pause");
return 0;
}
#包括
#包括
#包括
#包括
int main(){
字符字符串文本[50];
char-arraySaver[50];
int i=0,j=0,k=0;
printf(“输入字符串:”);
scanf(“%s”、&stringText);
对于(i=0;i由于这是家庭作业,我不打算写出解决方案的代码。但是,您非常接近。您有您的数字数组。您现在需要做的是:
迭代阵列版本
打印出每个元素
在外部变量中维护一个运行总计,例如sum
在循环外部,打印sum
更新
我不确定作业的要求是什么,但是如果你需要看单个数字,那么你就可以了。但是如果你需要看负数,或者如果你需要考虑一个数字作为单个数字的运行,那么你需要做更多的工作:
如果字符是负数,则假定它可能是负数;设置一个标记它的标志
如果字符是数字,则假定它是数字的开头。继续读取,直到遇到非数字字符,同时跟踪每个数字
保存到目前为止您已阅读的数字,同时考虑符号(即,您的标志是否为负数)
代码的其余部分应该是类似的。很接近,但是应该使用fgets()
而不是scanf()
,然后通过其他方式解析字符串(例如:sscanf
,以避免捕获换行符时出现各种问题等)。如果您所要做的只是对单个数字求和,这将起作用。对于更复杂的事情(即:在本代码中,abc12abc求和为“一加二”,而不是计算为“十二”),您将需要更复杂的逻辑
这里有一个提示:在现有循环中,您需要另一个类似于while(isdigit[k++])
的循环。祝您好运
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define MAX_BUF_LENGTH (50)
int main(void) {
char buf[MAX_BUF_LENGTH] = { 0 };
char digits[MAX_BUF_LENGTH] = { 0 };
char temp[MAX_BUF_LENGTH] = { 0 };
int i, j;
int sum = 0;
printf("Enter String: ");
fgets (buf,MAX_BUF_LENGTH,stdin);
/* Analyze the input string, and backup each digit while maintaining
* a running sum.
*/
for(i=0,j=0; i<strlen(buf); i++) {
if(isdigit(buf[i])) {
digits[j] = buf[i];
j++;
snprintf(temp, MAX_BUF_LENGTH, "%c", buf[i]);
sum += atoi(temp);
}
}
printf("Original String:%s\n", buf);
printf("Digit String: %s\n", digits);
printf("Sum of Digits: %d\n", sum);
system("pause");
return 0;
}
#包括
#包括
#包括
#包括
#定义最大长度(50)
内部主(空){
char buf[MAX_buf_LENGTH]={0};
字符数字[MAX_BUF_LENGTH]={0};
字符温度[MAX_BUF_LENGTH]={0};
int i,j;
整数和=0;
printf(“输入字符串:”);
fgets(基本单位,最大基本单位长度,标准尺寸);
/*分析输入字符串,并在维护时备份每个数字
*一笔经常性的款项。
*/
例如(i=0,j=0;我有没有你自己努力解决这个问题?你能给我们看看你的代码吗?从查找可用的代码开始,我相信你会在那里找到一些可用的东西。@VivinPalath欢迎。(是哪一个?我都不记得了。)“我有一些困难”-如果你不告诉我们它们是什么,很难帮助你。[20:18:56]野龟…:#include#include#include#include int main(){char stringText[50];char arraySaver[50];int i=0,j=0,k=0;printf(“输入字符串:);scanf(“%s”,&stringText);用于(i=0;他还需要一些方法来保持数字的独立性并找到负号。现在,当需要-12 45-56 100时,他的数组保护程序将看起来像124556100。可以作为2dim数组,也可以使用某种分隔符。谢谢你,你帮了我很大的忙:)@MichaeldOrgang要求不明确;我可以看到将负数分开,但如何将多位数与随机字符串分开?如何区分1231是1、2、3、1还是1、23、1或其他组合?从示例输入中,我认为您会寻找“垃圾”“在数字之间输入字符,因为这是我得到他的答案77的唯一途径。顺便说一句,我同意要求太模糊,难以解释。@MichaelDorgan我明白你的意思。你可以将其解释为非数字字符之间的一系列数字。从他答案的输出部分,他需要更“复杂”的内容。”跟踪多位数字和负号的逻辑。但不要直接给他。这应该是为了学习。以Dogbert的解决方案为参考,我有自己的东西。这应该会有帮助。:)@nimish做得很好。你能把你的代码作为答案发布,这样它就可以完整地存储在上面吗?@Dogbert不,我恐怕不能这样做,因为问题已经结束。我的代码仍然需要微调。例如:-我没有使用fgets。:P留下了故意的;y循环漏洞,以便他能够真正阅读我们的解决方案,理解所做的事情和为什么:)