gpt4 book ai didi

C编程for循环从右手边开始

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:43 25 4
gpt4 key购买 nike

我在尝试根据用户输入的数字位置从右侧开始循环遍历字符串时遇到了一些问题。所以基本上这将是我的程序的输出:

Enter a number: 1234567
Enter the digit position: 3
digitValue1(): 5

这是我的代码:

int main()
{
int num, digit, result;

printf("Enter the number: ");
scanf("%d", &num);
printf("Enter the digit position: ");
scanf("%d", &digit);
printf("digitValue1(): %d\n", digitValue1(num, digit));
return 0;
}

int digitValue1(int num, int k)
{
int result, i;
char str[15];
sprintf(str, "%d", num);
int len = strlen(str);
for (i = 0; i < len; i++) {
printf("%d ", i);
if (i == k) {
result = k;
}
}
return result;
}

因此,根据我在 digitValue1() 中所做的,我获取用户输入的 int num 并将其转换为字符串并循环遍历。然而,它是从左手边开始的。所以这是我的输出:

Enter a number: 1234567
Enter the digit position: 3
digitValue1(): 3

我在想我应该如何让循环从右手边开始。我试图反转 for 循环,但它没有意义。

提前致谢。

最佳答案

初始化i 以从末尾开始。请记住,strlen() 是一个自然数,因此最后一个字符的索引减 1。

还有一些细节需要注意:

  • 这实际上并没有反转被扫描的字符串;而是从字符串的末尾(右侧)开始扫描。

  • 由于循环从字符串的末尾开始并朝前面工作,因此需要调整停止条件以查找第 k 个字符。

  • 我们希望返回结果数字的整数值,因此我们必须将char 转换为int。最简单的方法是从结果数字中减去“0”的 ascii 值。

更新代码:

int digitValue1(int num, int k)
{
int result, i;
char str[15];
sprintf(str, "%d", num);
int len = strlen(str);
for (i = len-1; i >= 0; i--) { // Loop backwards from end of str
printf("%d ", i);
if (len-i == k) { // Check if we are k from end
result = str[i] - '0'; // Convert digit char to int
}
}
return result;
}

这仍然是一个详尽的搜索...即使在找到第 k 个元素之后,它也会继续搜索整个字符串。 (就像您最初的问题一样。)您需要考虑如何优化它,因此一旦确定结果它就会停止查找。

虽然不是循环,但计算您要查找的索引会更有效:

result = str[strlen(str)-k] - '0';

关于C编程for循环从右手边开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32151415/

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