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

标签 c arrays char sub-array

我正在尝试创建一个映射,在其中比较 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/

相关文章:

c - 在什么情况下 C 需要指向指针的指针?

c - LeaveCriticalSection() 是否将缓存的变量刷新到内存中?

java - 即使已初始化,也会出现 "Variable data not initialized"错误

python - 将数组从 Python 传递到 Fortran(并返回)

c - 为什么 C 中的 if 过程不适用于 char

c - Golang 的字符串和 C Char* 转换为 For Range 时出现内存问题,退出状态 3221226356

c++ - C++ 上 char 数组输出中不同颜色的字符

c - 使用 readdir 获取文件大小

c - 将两个数除以一个整数

objective-c - 将文本字段中的用户输入存储到 NSArray 中