gpt4 book ai didi

无法复制字符串的一部分

转载 作者:行者123 更新时间:2023-11-30 20:35:50 24 4
gpt4 key购买 nike

我想知道如何将字符串的一部分复制到另一个字符串,所以我检查了这个网站,看看是否可以获得答案,我做到了:How can I copy part of another string in C, given a starting and ending index

但是,当我使用这个

strncpy(dest, src + beginIndex, endIndex - beginIndex);

在我的代码上,它不起作用。为什么?我想我已经正确添加了索引。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define MAX 15

int main()
{
int j=0;
int i;
char RPNarray[MAX];
printf("Enter the RPN");
fgets(RPNarray,MAX,stdin);
int t=strlen(RPNarray);
double RPN[t][2];

for(i=0;i<=t;i++)
{
if(isspace(RPNarray[i]))
{
i=i+1;
}
else if (isdigit(RPNarray[i]))
{
int q,h;
q=i;
for (h=i;isdigit(RPNarray[h]);h++)
{
h=h+1;
}
int r;
double u;
r=h-q;
char number[r];
printf("%s ", RPNarray);
strncpy(number,RPNarray + q,h - q);
printf ("%s\n",number);
u=atof(number);
printf("%lf.\n",u);
RPN[j][0]=0;
RPN[j][1]=u;
i=i+1;
j=j+1;
}
}
int b;
for (b=0;b<=j;b++)
{
printf("%lf %lf \n",RPN[b][0],RPN[b][1]);
}
}

r 是数字的位数,q 是数字第一位数字的位置,h 是数字后面第一个非数字的位置.

这个程序应该按照代码所示打印 RPN 矩阵。

 (0,(first number we introduce via stdin)
(0,(second number we introduce via stdin)
(0,(third number we introduce via stdin)

我还添加了更多打印来查看问题出在哪里,正如您所看到的,第二个打印没有按应有的方式打印。

如果输入是:

56 6 
The output is:
56 6
56OT?
56.000000.
vector 0.000000 56.000000
vector 0.000000 0.000000

我能做什么,输出是:

56 6
56
56.000000.
56 6
6
6.000000.
vector 0.000000 56.000000
vector 0.000000 6.000000

谢谢

最佳答案

也许您只需要继续而不是递增?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>

#define MAX 15

int main() {

int j = 0;
int i;
char RPNarray[MAX];
printf("Enter the RPN");
fgets(RPNarray, MAX, stdin);
int t = strlen(RPNarray);
double RPN[t][2];

for (i = 0; i <= t; i++) {
if (isspace(RPNarray[i])) {
continue;//i = i + 1;
}
else if (isdigit(RPNarray[i])) {
int q, h;
q = i;
for (h = i; isdigit(RPNarray[h]); h++) {
h = h + 1;
}
int r;
double u;
r = h - q;
char number[r];
printf("%s ", RPNarray);
strncpy(number, RPNarray + q, h - q);
printf("%s\n", number);
u = atof(number);
printf("%lf.\n", u);
RPN[j][0] = 0;
RPN[j][1] = u;
i = i + 1;
j = j + 1;
}
}
int b;
for (b = 0; b <= j; b++) {
printf("%lf %lf \n", RPN[b][0], RPN[b][1]);
}
}

测试

Debug/gnu
Enter the RPN56 6
56 6
56
56.000000.
56 6
6

6.000000.
0.000000 56.000000
0.000000 6.000000
0.000000 0.000000

它看起来像你想要的输出。我所做的只是改变一项声明。

关于无法复制字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37615144/

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