如何从字符串数组中创建一个字符串C
我正在学习数组,并想知道是否有人可以帮助我。我有一个字符串数组,需要创建一个新的字符串,它是所有数组元素的串联。我遇到的问题是我只能打印我的数组中的第一个字符串,而不是所有的字符串。我知道我的数组中的每个字符串末尾都有一个空值,那么我将如何解决该问题?也许2D数组?顺便说一下,我不允许使用string.h中的任何字符串操作函数。谢谢。如何从字符串数组中创建一个字符串C
#include <stdio.h>
#include <stdlib.h>
int findLength(char array[])
{
int i = 0;
for (i = 0; array[i] != '\0'; i++)
{
}
return i;
}
void arrayToString(char string[])
{
int n = 0;
int i = 0;
int l = findLength(string);
char *finalString;
finalString = malloc(l * sizeof(char));
for (i = 0; string[i] != '\0'; i++) {
finalString[n] = string[i];
n++;
}
for (i = 0; finalString[i] != '\0'; i++) {
printf("%c", finalString[i]);
}
}
int main(int argc, const char * argv[])
{
char *color[] = { "red", "blue", "red" };
arrayToString(*color);
return 0;
}
更改函数arrayToString
有char **
类型的两个arguments.one和size_t
类型的第二定义字符串的数量。也让它的返回值为char *
返回一个指向分配内存的指针。最后不要忘记释放这个内存。
#include <stdio.h>
#include <stdlib.h>
int findLength(char array[]) {
int i = 0;
for (i = 0; array[i] != '\0'; i++) {
}
return i;
}
char* arrayToString(char **string, size_t size) {
int bigSize = 0, len;
int i = 0, j, k;
for (j = 0; j < size; j++) {
bigSize += findLength(string[j]);
}
char *bigstring = (char *)malloc(bigSize + 1);
for (j = 0; j < size; j++) {
len = findLength(string[j]);
for (k = 0; k < len; k++) {
bigstring[i++] = string[j][k];
}
}
bigstring[i] = '\0';
return bigstring;
}
int main(int argc, const char * argv[])
{
char *color[] = { "red", "blue", "red" };
char *bigstring = arrayToString(color, 3);
printf("%s\n", bigstring);
free(bigstring);
return 0;
}
谢谢@ machine_1 –
不客气... –
@AmirSankar我在你的文章中改进了代码的格式。请接受编辑,看起来更清晰 –
你必须在你的代码的几个问题,这里是固定版本注释:
size_t findLength(char* array[]) {
size_t l = 0;
while (char *t = *array++)
while (*t++)
l++;
return l;
}
void copyAll(char* array[], char* out) {
while (char *t = *array++)
while (*t)
*out++ = *t++; // copy every symbol from every line into out string
*out = '\0'; // append last null-terminator
}
void arrayToString(char* array[]) {
char* finalString = malloc((findLength(array) + 1) * sizeof(char)); // allocate + 1 symbol for null terminator
copyAll(array, finalString);
printf("%s", finalString);
free(finalString); // don't forget to release memory
}
int main(int argc, char* argv[]) {
char* color[] = { "red", "blue", "red", 0 }; // you should add array terminator as well
arrayToString(color);
return 0;
}
小数点。 OP表示“不允许使用string.h中的任何字符串操作函数”。所以不允许使用'strcpy','strlen'和'strcat'调用。 – kaylum
@kaylum哦,错过了,会修复 –
谢谢@Lashane! –
只是提示使用嵌套循环! – Cherubim
'void arrayToString(char string [])'只接受单个字符串,因此只能对单个字符串进行操作。您需要将其更改为如下所示:'void arrayToString(char * strings [],size_t len)'。请注意,传递数组的'len'非常重要,因为它不能从函数内的数组本身派生。在完成之后,使用@ ch3rub7给出的提示。另外,不要忘了'免费'分配'finalString.' – kaylum
谢谢@kaylum和@ ch3rub7! –