gpt4 book ai didi

c - C中使用指针的子字符串

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

我有一个指向字符串开头的字符指针和一个小于字符串长度的索引。现在我想创建一个指针来指向原始字符串的子字符串从开始到索引或具有上述约束的子字符串。请帮助我找到完成它的方法。这是一些代码:

char* ch="323+465";//this is the original string
int index=2; //this is the index upto which I wish to create a substring,
// in java, it would have been ch.substring(0,3), if ch were a String

提前致谢。

最佳答案

如果不创建 3 个字符串,就无法做到这一点。字符点仅标记字符串的开头,因此您需要将指针和索引组合成一个新类型。请记住,您在 C 中没有字符串。在 Java(和其他语言)等语言中,无论如何都会创建子字符串的副本。

struct pseudo_string { char *s, int index; } vstring[3];
char* ch="323+465";
vstring[0].s = ch;
vstring[0].index = 2;
vstring[1].s = ch + index + 1; // weird
vstring[1].index = 1;
vstring[2].s = vstring[1].s + 1;
vstring[2].index = 2;

所以它过于复杂且无用。在这种情况下,索引被用作计数器...

如果你想保持相同的基指针,你需要 2 个索引或 1 个索引和一个 len:

struct pseudo_string2 { char *s; int start; int end; };

但这对于小字符串来说有点矫枉过正。

如果不想使用malloc,可以尝试使用矩阵:

char vstring[3][10]={0};
strncpy(vstring[0], ch, 3);
strncpy(vstring[1], ch+3, 1);
strncpy(vstring[2], ch+4, 3);

矩阵的优点是,即使您浪费了几个字节,也不需要释放它。但是,如果您需要在此函数之外使用这些值,那么除了使用 malloc 和 free(不要为此考虑全局变量 ;-)之外别无选择。

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

char * substr(char *s, int start, int end)
{
int size = end - start + 2; // 1 for the inclusive limits and another 1 for the \0
char * r = (char*)malloc(size);
strncpy(r,s+start, size-1);
r[size-1]=0;
return r;
}
int main()
{
char* ch="323+465";
char *parts[3];
parts[0] = substr(ch, 0,2);
parts[1] = substr(ch, 3,3);
parts[2] = substr(ch, 4,6);
printf("%s %s %s\n", parts[0], parts[1], parts[2]);
free(parts[0]);
free(parts[1]);
free(parts[2]);
}

关于c - C中使用指针的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12406459/

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