gpt4 book ai didi

c - 添加数字并计算字符串的字母(段错误)

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:24 24 4
gpt4 key购买 nike

作为作业的一部分,我必须编写一个程序,从用户那里获取一个字符串,并打印出该字符串中字母的数量,以及该字符串中数字的总和。因此,例如,如果我输入 abc123 作为我的字符串,程序应该告诉我有 3 个字母,数字的总和是 6(3+ 2+1)。该程序必须使用 corecursive 函数(即函数相互调用)。到目前为止,我的代码如下:

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

//Function prototypes
void countAlph(char str[], int, int);
void sumDigits(char str[], int, int);

int main(void)
{
//Create an array that can hold 25 characters
char anStr[25];
int inputSize;

//Get string from user
printf("Enter an alphanumeric string:\n");
scanf("%s", anStr);

//Get size (# of elements in the array)
inputSize = strlen(anStr);

//Function call
countAlph(anStr, inputSize, 0); //pass the string, size of the string, and 0 (first index position)
}

//function that counts # of letters
void countAlph(char str[], int size, int currentIndex)
{
//use ASCII codes!

int alphaCount = 0, i;

if(currentIndex < size)
{
for(i=0; i<size; i++)
{
if((str[i] >= 65 && str[i] <= 90) || (str[i] >= 97 && str[i] <= 122)) //if element is a letter
{
alphaCount++; //increase # of letters by 1
}
else if(str[i] >= 48 && str[i] <= 57) //if element is NOT a letter
{
sumDigits(str, size, i); //go to the sumDigits function
}
}
}
printf("There are %d letters in this string\n", alphaCount);
}

//function that adds all the digits together
void sumDigits(char str[], int size, int currentIndex)
{
//use ASCII codes!

int sum = 0, i;

if(currentIndex < size)
{
for(i=0; i<size; i++)
{
if(str[i] >= 48 && str[i] <= 57) //if element is a digit
{
//I found the line of code below online after searching how to convert from ASCII to int
str[i] = str[i] - '0'; //this converts the ascii value of the element to the decimal value
sum = sum + str[i]; //add that digit to the running sum
}
else if((str[i] >= 65 && str[i] <= 90) || (str[i] >= 97 && str[i] <= 122)) //if element is NOT a number
{
countAlph(str, size, i); //go to the countAlph function
}
}
}
printf("The sum of the digits of this string is %d\n", sum);
}

如果我的字符串只包含数字或字母,我的程序可以正常工作。但是,如果我输入一个字母数字字符串,例如 "abc123",我会遇到段错误。关于我做错了什么的任何想法?我假设问题与我的循环逻辑有关,但我不是 100% 确定。

最佳答案

你的两个函数互相调用。每个都将 currentIndex 传递给另一个,但每个都忽略从另一个获取的 currentIndex 并从 i = 0 重新开始。

因此,如果您给它一个字符串,该字符串具有从字母到数字的转换(例如“g3”),这两个函数会相互调用,直到它们使调用堆栈过载。

一个解决方案:使用函数使用 currentIndex

另一种解决方案:在一个函数中处理字母和数字。

关于c - 添加数字并计算字符串的字母(段错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33358458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com