C中的string,如何获取subString
我有一个string:
char * someString;
如果我想要这个string的前五个字母,并希望将其设置为otherString
,我将如何做?
#include <string.h> ... 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
char* someString = "abcdedgh"; char* otherString = 0; otherString = (char*)malloc(5+1); memcpy(otherString,someString,5); otherString[5] = 0;
更新 :
提示:了解定义的一个好方法叫做左右规则(最后一些链接):
从标识符开始阅读并大声说出“> someString
is …”
现在转到someString的右边(语句以分号结尾,没什么可说的)。
现在在标识符( *
遇到)=>左边,所以说“…指向…”。
现在到“ *
”的左边(find关键字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声明
广义:
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); }
你需要为新stringotherString分配内存。 一般来说,对于长度为n的子string,这样的东西可能适合你(不要忘记做边界检查…)
char *subString(char *someString, int n) { char *new = malloc(sizeof(char)*n+1); strncpy(new, someString, n); new[n] = '\0'; return new; }
这将返回someString的前n个字符的子string。 确保在使用free()完成后释放内存。
strncpy(otherString, someString, 5);
不要忘记为otherString分配内存。
#include <stdio.h> #include <string.h> 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。
一举两得:
char *otherString = strncpy((char*)malloc(6), someString); otherString[5] = 0;
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
我认为这是简单的方法…但我不知道如何直接传递结果variables,然后创build一个本地字符数组作为临时工,并返回它。
char* substr(char *buff, uint8_t start,uint8_t len, char* substr) { strncpy(substr, buff+start, len); substr[len] = 0; return substr; }
你可以使用snprintf来获取char数组的一个子string。 这是一个名为“substring.c”的文件示例:
#include <stdio.h> 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
输出:
这是一个string
注意:
欲了解更多信息,请参阅printf手册页。