[英]search array for string
How would i implement this?Im trying to compare a array of c strings to a single string and if there is no match append it to the 2d array. 我将如何实现这一点?我试图将c字符串数组与单个字符串进行比较,如果没有匹配则将其附加到2d数组。
char*mprt,uni[100][16];
mprt = &uni[0][0];
for (int s = 0;s <= 99;s++)
{
for (int z = 0;z <= 15;z++)
{
if (strcmp(mprt++, string1) != 0)
{
uni[s][z] = string1[z];
}
}
}
In your for loop, you need to copy the whole string to append it, 在for循环中,您需要复制整个字符串以附加它,
Replace the line by this, 用此替换线,
strcpy(uni[s], string1[z]);
Considering string1[z]
is an element of an array of char pointers. 考虑
string1[z]
是char指针数组的元素。
Edit: 编辑:
Not sure if this is what you're trying to do, but you'll end up with all elements set to string1
不确定这是否是你想要做的,但你最终将所有元素设置为
string1
char string1[] = "String";
char uni[100][16] = {};
for (int s = 0; s < 100; s++)
{
if (strcmp(uni[s], string1) != 0)
{
strcpy(uni[s], string1);
}
}
Or this, without strcpy()
或者这个,没有
strcpy()
char string1[] = "String";
char uni[100][16] = {};
for (int s = 0; s < 100; s++)
{
for (int r = 0; r < sizeof(string1); r++)
{
uni[s][r] = string1[r];
}
}
Ok ... from your comments I now get what you're trying to do. 好的......从你的评论我现在得到你想要做的。 You'd want to make this into a function so you could feed words to it, but it should get you pointed in the right direction.
你想把它变成一个函数,这样你就可以向它提供单词,但它应该让你指向正确的方向。
Note that you can use char[][]
, but this way your strings can be of any length because we dynamically allocate them when we put them in the list. 请注意,您可以使用
char[][]
,但这样您的字符串可以是任意长度,因为我们在将它们放入列表时动态分配它们。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
/* space for 100 strings */
char **uni = calloc(100, sizeof(char*));
char **i;
/* Put one word in the list for test */
*uni = calloc(5, sizeof(char*));
strncpy(*uni, "this", 5);
/* here's the string we're going to search for */
char * str2 = "that";
/* go through the first dimension looking for the string
note we have to check that we don't exceed our list size */
for (i = uni; *i != NULL && i < uni+100; i++)
{
/* if we find it, break */
if (strcmp(*i,str2) == 0)
break;
}
/* if we didn't find the string, *i will be null
* or we will have hit the end of our first dimension */
if (i == uni + 100)
{
printf("No more space!\n");
}
else if (*i == NULL)
{
/* allocate space for our string */
*i = calloc(strlen(str2) + 1, sizeof(char));
/* copy our new string into the list */
strncpy(*i, str2, strlen(str2) + 1);
}
/* output to confirm it worked */
for (i = uni; *i != NULL && i < uni+100; i++)
printf("%s\n",*i);
}
For completeness, the char[][]
version: 为完整
char[][]
, char[][]
版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char uni[100][16];
int i,j;
/* init our arrays */
for (i=0;i<100;i++)
for (j=0;j<16;j++)
uni[i][j] = '\0';
/* Put one word in the list for test */
strncpy(uni[0], "this",15);
/* here's the string we're going to search for */
char * str2 = "that";
/* go through the first dimension looking for the string */
for (i = 0; uni[i][0] != '\0' && i < 100; i++)
{
/* if we find it, break */
if (strcmp(uni[i],str2) == 0)
break;
}
/* if we didn't find the string, uni[i][0] will be '\0'
* or we will have hit the end of our first dimension */
if (i == 100)
{
printf("No more space!\n");
}
else if (uni[i][0] == '\0')
{
/* copy our new string into the array */
strncpy(uni[i], str2, 15);
}
/* output to confirm it worked */
for (i = 0; uni[i][0] != '\0' && i < 100; i++)
printf("%s\n",uni[i]);
}
Edit to explain C pointers and arrays from comments below: 编辑以解释以下评论中的C指针和数组:
In C, arrays degrade to pointers. 在C中,数组降级为指针。 This is actually really confusing when you first start.
当你第一次开始时,这实际上真的很混乱。
If I have char myArray[10]
and I want to pass that to a function that takes a char *
argument, I can use either &myArray[0]
or just myArray
. 如果我有
char myArray[10]
并且我想将它传递给一个带有char *
参数的函数,我可以使用&myArray[0]
或myArray
。 When you leave off the index, it degrades to a pointer to the first element in the array. 当你离开索引时,它会降级为指向数组中第一个元素的指针。
In a multidimensional array like yours, &uni[5][0]
== uni[5]
- both are pointers to the first element in the second dimension at index 5 in the first. 在像你这样的多维数组中,
&uni[5][0]
== uni[5]
- 两者都指向第一个中索引为5的第二个维度中的第一个元素。 It degrades to char*
pointed at the beginning of the 6th word in your list. 它降级为
char*
指向列表中第6个单词的开头。
to append to the end of the 2D array you need to use dynamic memory allocation 要附加到2D数组的末尾,您需要使用动态内存分配
const int row_max = 100, col_max = 16;
char** uni = NULL;
char searchString[col_max] = "xyz";
int currentLength = 0;
uni = (char**) malloc (row_max * sizeof(char*)); //TODO:error handling code to be added
for (int row = 0; row < row_max; row++)
{
uni[row] = (char*)malloc(col_max * sizeof(char));//TODO:error handling code to be added
currentLength = row;
}
for (int row = 0; row < row_max; row++) //fill array uni with data here
{
uni[row] = "abc";
}
for (int row = 0; row < row_max; row++)
{
for (int col = 0; col < col_max; col++)
{
if (strcmp(&uni[row][col], searchString) != 0 )
{//string not found
uni = (char**)realloc(uni, (currentLength + 1) * sizeof(char*));//TODO:error handling code to be added
uni[currentLength + 1] = (char*)malloc(col_max);//TODO:error handling code to be added
currentLength++;
strcpy(uni[currentLength],searchString); //append at end of 2D array
goto stop;
}
}
}
stop: for (int row = 0; row <= currentLength; row++) free(uni[row]); stop:for(int row = 0; row <= currentLength; row ++)free(uni [row]); free(uni);
自由(UNI);
return 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.