我有一个字符串:
char * someString;
如果我想要此字符串的前五个字母并想将其设置为otherString
,我该怎么做?
答案 0 :(得分:51)
#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
答案 1 :(得分:7)
char* someString = "abcdedgh";
char* otherString = 0;
otherString = (char*)malloc(5+1);
memcpy(otherString,someString,5);
otherString[5] = 0;
<强>更新强>:
提示:理解定义的好方法称为左右规则(最后的一些链接):
从标识符开始读取并说出aloud =&gt; “someString
是......”
现在转到someString的右边(语句以分号结束,无话可说)
现在左转标识符(遇到*
)=&gt;所以说“......指向......”
现在转到“*
”左侧(找到关键字char
)=&gt;说“.. char”。
完成!
所以char* someString;
=&gt; “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
一些链接: How to interpret complex C/C++ declarations和 How To Read C Declarations
答案 2 :(得分:7)
广义:
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);
}
答案 3 :(得分:5)
您需要为新字符串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()完成后,请确保释放内存。
答案 4 :(得分:4)
您可以使用snprintf精确获取char数组的子字符串。这是一个名为“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
输出:
这是一个字符串
注意:
有关详细信息,请参见printf手册页。
答案 5 :(得分:2)
您可以将C字符串视为指针。因此,当您声明:
char str[10];
str 可用作指针。因此,如果您只想复制一部分字符串,则可以使用:
char str1[24] = "This is a simple string.";
char str2[6];
strncpy(str1 + 10, str2,6);
这将从第11个元素开始将 str1 数组中的6个字符复制到 str2 中。
答案 6 :(得分:0)
strncpy(otherString, someString, 5);
不要忘记为otherString分配内存。
答案 7 :(得分:0)
#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,但最小的程序是错误的形式,应该避免使用。
答案 8 :(得分:0)
一举两得:
char *otherString = strncpy((char*)malloc(6), someString);
otherString[5] = 0;
答案 9 :(得分: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
答案 10 :(得分:0)
我认为这很简单...但我不知道如何直接传递结果变量然后我创建一个本地char数组作为temp并返回它。
<style>
.rotate{
-moz-transition: all 0.2s ease;
-webkit-transition: all 0.2s ease;
transition: all 0.2s ease;
}
</style>
<div class="rotate" style="width: 100px; height: 100px; background-color: red;"></div>
<script>
$(".rotate").click(function(){
var rotate = 180;
var elem = $(this);
//get the current degree
var currentDegree = 0;
if(typeof(elem.attr('data-degree')) != 'undefined') {
currentDegree += parseInt(elem.attr('data-degree'), 10);
}
//calculate the new degree
var newDegree = currentDegree + rotate;
//modify the elem css
elem.css({ WebkitTransform: 'rotate(' + newDegree + 'deg)'});
elem.css({ '-moz-transform': 'rotate(' + newDegree + 'deg)'});
elem.css('transform','rotate(' + newDegree + 'deg)');
//store the degree for next time
elem.attr('data-degree', newDegree);
});
</script>
答案 11 :(得分:0)
此代码是 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<b ){
r[m] = s[n];
m++;
}
n++;
}
r[m]='\0';
return r;
}