C 从字符串中提取字母和数字

C 从字符串中提取字母和数字,c,C,我在布置作业时遇到了一些困难,不知道是否能得到一些帮助。。 无论如何,任务是:“你必须从键盘上输入随机的字母和数字。应该从程序中分析字符串,然后必须提取所有数字,并将它们相加。 e、 g.输入:asd-12sdf45-56asdf100输出:77 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> int main() { char

我在布置作业时遇到了一些困难,不知道是否能得到一些帮助。。 无论如何,任务是:“你必须从键盘上输入随机的字母和数字。应该从程序中分析字符串,然后必须提取所有数字,并将它们相加。 e、 g.输入:asd-12sdf45-56asdf100输出:77

#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循环漏洞,以便他能够真正阅读我们的解决方案,理解所做的事情和为什么:)