gpt4 book ai didi

c - 如何从字符数组中提取子字符数组

转载 作者:行者123 更新时间:2023-11-30 14:42:07 26 4
gpt4 key购买 nike

我正在尝试创建一个映射,在其中比较 5 个字符并将它们与大小写匹配。我的问题是 char 数组的语法,也许有一种更简单的方法来提取子数组。

我的总体想法是:

char str[80];
char tempStr[5]="";
int i=0;

for(i=0; i<4; i++){
strcat(tempStr,str[i]);


}
// match tempStr to cases
// go back to loop through for the next tempStr

输入示例:

"Iliveon123streetUnitedStatesOfAmericaSSS"

每次循环时我都想提取

的子数组
"Ilive"
"on123"
"stree"
"tUnit"
"edSta"
"tesOf"
"Ameri"
"caSSS"

并比较这个临时字符串

最佳答案

没有理由在 for 循环中设置迭代。更好的方法是在仍有尚未输出的字符要输出时进行循环。考虑输入字符串的 strlen,您将把它分成 block 大小的 block 并输出每次迭代。输出 block 后,只需从长度中减去输出的 block 大小即可确定剩余的字符数。继续,直到少于 block 大小字符或没有剩余字符。

如果在最终迭代中要输出的字符少于完整的 block 大小,只需将 block 大小更新为剩余长度并输出该数量的字符。

无需使用strcpy等扫描字符串末尾。您的 block 大小决定了每个子字符串中的字符数,因此您可以简单地memcpy 你的字符,在 substring[blksz] 处添加 nul-termination 字符,然后输出结果字符串(如图所示,带有转义引号)

使用您的输入的最小示例可能是:

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

#define BLKSZ 5

int main (void) {

char str[] = "Iliveon123streetUnitedStatesOfAmericaSSS",
blk[BLKSZ + 1]; /* storage for each substring */
size_t len = strlen (str), /* length of str */
blksz = BLKSZ, /* initial blocksize */
n = 0; /* block counter */

while (len) { /* while chars remain to copy */
memcpy (blk, str + n++ * BLKSZ, blksz); /* copy blocksize chars */
blk[blksz] = 0; /* nul-terminate block */
printf ("\"%s\"\n", blk); /* output block */
len -= blksz; /* subtract blocksize from len */
if (len < blksz) /* less than blocksize remains, blksz is len */
blksz = len;
}
}

示例使用/输出

$ ./bin/strsubstr
"Ilive"
"on123"
"stree"
"tUnit"
"edSta"
"tesOf"
"Ameri"
"caSSS"

仔细检查一下,如果您还有其他问题,请告诉我。

关于c - 如何从字符数组中提取子字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567541/

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