C中的字符串,如何获取subString

我有一个字符串:

char * someString;

如果我想要此字符串的前五个字母并将其设置为otherString,该怎么办?

SuperString asked 2020-02-17T20:47:11Z

11个解决方案

53 votes

#include

...

char otherString[6]; // note 6, not 5, there's one there for the null terminator

...

strncpy(otherString, someString, 5);

otherString[5] = '\0'; // place the null terminator

pib answered 2020-02-17T20:47:28Z

7 votes

广义的:

char* subString (const char* input, int offset, int len, char* dest)

{

int input_len = strlen (input);

if (offset + len > input_len)

{

return NULL;

}

strncpy (dest, input + offset, len);

return dest;

}

char dest[80];

const char* source = "hello world";

if (subString (source, 0, 5, dest))

{

printf ("%s\n", dest);

}

Dan Olson answered 2020-02-17T20:47:48Z

7 votes

char* someString = "abcdedgh";

char* otherString = 0;

otherString = (char*)malloc(5+1);

memcpy(otherString,someString,5);

otherString[5] = 0;

更新:

提示:了解定义的一种好方法称为“右-左规则”(最后一些链接):

从标识符开始读取,然后大声说=>“ char* someString;是...”

现在转到someString的右边(语句以分号结尾,无话可说)。

现在转到标识符的左侧(遇到*)=>所以说“ ...指向...的指针”。

现在转到“ *”(找到关键字char)的左侧=>说“ ..char”。

做完了!

所以char* someString; =>“ someString是一个指向char的指针”。

由于指针仅指向某个内存地址,因此它也可用作字符“数组”的“起点”。

这适用于任何事物..

char* s[2]; //=> s is an array of two pointers to char

char** someThing; //=> someThing is a pointer to a pointer to char.

//Note: We look in the brackets first, and then move outward

char (* s)[2]; //=> s is a pointer to an array of two char

一些链接:如何解释复杂的C / C ++声明和如何阅读C声明

Liao answered 2020-02-17T20:48:53Z

5 votes

您需要为新字符串otherString分配内存。 通常,对于长度为n的子字符串,类似这样的方法可能对您有用(请不要忘记进行边界检查...)

char *subString(char *someString, int n)

{

char *new = malloc(sizeof(char)*n+1);

strncpy(new, someString, n);

new[n] = '\0';

return new;

}

这将返回someString的前n个字符的子字符串。 完成使用free()的操作后,请确保释放内存。

Neal answered 2020-02-17T20:49:17Z

4 votes

您可以使用snprintf获得具有精度的char数组的子字符串。 这是一个名为“ substring.c”的文件示例:

#include

int main()

{

const char source[] = "This is a string array";

char dest[17];

// get first 16 characters using precision

snprintf(dest, sizeof(dest), "%.16s", source);

// print substring

puts(dest);

} // end main

输出:

这是一个字符串

注意:

有关更多信息,请参见printf手册页。

angelvmx answered 2020-02-17T20:49:55Z

0 votes

strncpy(otherString, someString, 5);

不要忘记为otherString分配内存。

Colin answered 2020-02-17T20:50:15Z

0 votes

#include

#include

int main ()

{

char someString[]="abcdedgh";

char otherString[]="00000";

memcpy (otherString, someString, 5);

printf ("someString: %s\notherString: %s\n", someString, otherString);

return 0;

}

如果您不使用printf语句并在所有常量中都放入常量,则不需要stdio.h,但最小的程序是不好的形式,应避免使用。

gavaletz answered 2020-02-17T20:50:35Z

0 votes

一口气做到这一切:

char *otherString = strncpy((char*)malloc(6), someString);

otherString[5] = 0;

Steve Emmerson answered 2020-02-17T20:50:54Z

0 votes

char largeSrt[] = "123456789-123"; // original string

char * substr;

substr = strchr(largeSrt, '-'); // we save the new string "-123"

int substringLength = strlen(largeSrt) - strlen(substr); // 13-4=9 (bigger string size) - (new string size)

char *newStr = malloc(sizeof(char) * substringLength + 1);// keep memory free to new string

strcpy(newStr, largeSrt, substringLength); // copy only 9 characters

newStr[substringLength] = '\0'; // close the new string with final character

printf("newStr=%s\n", newStr);

free(newStr); // you free the memory

Cristian answered 2020-02-17T20:51:10Z

0 votes

我认为这是简单的方法...但是我不知道如何直接传递结果变量,然后创建一个本地char数组作为temp并返回它。

char* substr(char *buff, uint8_t start,uint8_t len, char* substr)

{

strncpy(substr, buff+start, len);

substr[len] = 0;

return substr;

}

Mohammad Nikouie answered 2020-02-17T20:51:30Z

0 votes

此代码是substr函数,模仿其他语言中存在的同名函数,只需解析:字符串,开头和字符数,例如:

printf( "SUBSTR: %s", substr("HELLO WORLD!",2,5) );

上面将打印HELLO。 如果您在字符串长度范围内传递值,则该值将被忽略,因为循环只会迭代字符串的长度。

char *substr(char *s, int a, int b) {

char *r = (char*)malloc(b);

strcpy(r, "");

int m=0, n=0;

while(s[n]!='\0')

{

if ( n>=a && m

r[m] = s[n];

m++;

}

n++;

}

r[m]='\0';

return r;

}

Daniel J. answered 2020-02-17T20:51:55Z

C语言如何依次读取字符,C中的字符串,如何获取subString相关推荐

  1. matlab依次读取每个数,『matlab如何依次读取文件夹中EXCEL文件,并对每一个EXCEL特定列全部数值进行处理?』matlab调入excel文件的某一列...

    matlab导入excel表格,第一行为x,第一列为y的数据,其余为z 行的NI(r=1--0.25)比烦. filename='a.xls';%,可据你的需要更改 y=xlsread(filenam ...

  2. Python依次读取Excel文件中的Sheet

    利用pandas依次读取excel表格中每个sheet的数据,并按照行进行打印,输出格式为列表 主要解决以下问题: 读取Excel 对每个sheet中的数据单独读取 按照行对每一条数据进行读取 将读取 ...

  3. C语言 —— 把字符指针中的字符串,存入字符数组中

    问题描述:有一个用字符指针表示的字符串char *str = "0 12";  有一个数组 char buf[128] = {0}; 现在需要将字符指针表示的字符串"0 ...

  4. (C语言)输入一行字符,将此字符串中最长的单词输出。

    输入一行字符,将此字符串中最长的单词输出. #include<stdio.h> #include<string.h> int main() {char a[100], b[10 ...

  5. java 判断 中文字符_java中判断字符串中是否有中文字符

    package com.meritit.test; public class TestChart { public static void main(String[] args) throws Exc ...

  6. mysql 模糊匹配比自己短潆字符_mysql中生成字符串对应的英文字母(拼音首字母)...

    mysql中生成字符串对应的英文字母(拼音首字母)的存储过程,触发器和函数 1.规则 1.1.输入字符串长度255(可变),输出字符串10(可变) 1.2.对于全英文字母或数字,输出空格后的首字符,均 ...

  7. java 判断是否中文字符_java中判断字符串是否是中文的方法

    java中判断字符串是否是中文的方法 发布时间:2020-06-25 14:07:38 来源:亿速云 阅读:79 作者:Leah 本篇文章为大家展示了java判断字符串是否为中文的方法,代码简明扼要并 ...

  8. 如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

    原文地址:  http://blog.csdn.net/stpeace/article/details/12404925 如下代码均在Windows/VC++6.0下测试通过, 请一定注意linux和 ...

  9. java读取word表格中的数据_JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

最新文章

  1. JS 实现可停顿的垂直滚动
  2. socket什么意思_浅析Redis为什么这么快
  3. linux chpasswd命令 批量修改用户密码
  4. flutter分平台主题定制
  5. SQLServer------聚集索引和非聚集索引的区别
  6. python mpi开销_GitHub - hustpython/MPIK-Means
  7. Linux调试时常见问题,C程序在linux下调试时经常出现的问题
  8. 不均匀正负样本分布下的机器学习
  9. java中jtextpane_Java JTextPane
  10. 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题
  11. PHP读写指定URL参数的方法
  12. 图像处理实战-Python编程进阶
  13. VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
  14. MySQL卸载干净检查_MySQL数据库卸载干净处理
  15. php pdf怎么转换成jpg图片,如何在线将pdf转换成jpg图片格式?
  16. mongodb-b站黑马程序员
  17. 根据身份证号计算年龄 15位或18位身份证号的年龄计算方法
  18. 计算机键盘的型号,标准电脑键盘尺寸
  19. Vert.x(vertx) 实现TCP服务
  20. LitJson问题汇总

热门文章

  1. uniapp php交互,uni-app路由跳转及参数的传参和接收
  2. 河南oracle客户端,解决Oracle监听服务报错
  3. LVM逻辑卷管理@设备、格式、摩、引导自己主动安装一个完整的章节
  4. c语言怎么储存字母,c语言怎么用变量存储中文字符?书本上面没有的秘密
  5. linux环境 前端开发环境搭建,Linux运维知识之linux 前端环境搭建
  6. JAVA获取同一路径下所有子类或接口实现类
  7. 前端 JavaScript 实现一个简易计算器
  8. 项目缺少包如何和服务器,解决缺少服务器依赖包问题
  9. linux对于图形方式的运行级,在大多数Linux发行版本中,图形方式的运行级定义为( )?...
  10. 我的博客学习记录一箩筐(每天更新)