在c字符串中搜索和替换子字符串
我对搜索和替换另一个字符串中的子字符串有疑问 我有一些在c字符串中搜索和替换子字符串,c,string,C,String,我对搜索和替换另一个字符串中的子字符串有疑问 我有一些str字符串,带有姓名和****而不是出生年份,还有mat矩阵数组(3d数组)。 该矩阵包含有关人员的详细信息(fName、lName和出生年份)。 我需要的是运行str并取名字(可以是第一个或最后一个),运行矩阵并找到该人的年份(如果有多人同名,请写第一个) 我试过: void fillYears(char* mat[][M], int rowsNum, char str[MAX_INPUT]){ char *token,*token
str
字符串,带有姓名和****而不是出生年份,还有mat
矩阵数组(3d数组)。
该矩阵包含有关人员的详细信息(fName、lName和出生年份)。
我需要的是运行str
并取名字(可以是第一个或最后一个),运行矩阵并找到该人的年份(如果有多人同名,请写第一个)
我试过:
void fillYears(char* mat[][M], int rowsNum, char str[MAX_INPUT]){
char *token,*token2;
char tmpStr[MAX_INPUT];
int i,index = 0;
char subStr[2] = "\n";
strcpy(tmpStr,str);
/* get the first token */
token = strtok(tmpStr, subStr);
index+=strlen(token)+1;
/* walk through other tokens */
while( token != NULL )
{
token2 = strtok(token, " ");
//walk through the matrix
for(i=0;i<rowsNum;i++){
// check first name and last name if the same as token name
if(strcmp(mat[i][0],token2) == 0 || strcmp(mat[i][1],token2) == 0)
{
str[index-5] = mat[i][2][0];
str[index-4] = mat[i][2][1];
str[index-3] = mat[i][2][2];
str[index-2] = mat[i][2][3];
break;
}
}
token = strtok((str+index), subStr);
index+=strlen(token);
}
}
void main(){
char * inputStr[NUM_OF_ROWS][M];
char str[MAX_INPUT] = "aa ****\nbbb ****\ncc ****\n";
inputStr[0][0] = "aa";
inputStr[0][1] = "aaa";
inputStr[0][2] = "1111";
inputStr[1][0] = "bb";
inputStr[1][1] = "bbb";
inputStr[1][2] = "2222";
inputStr[2][0] = "cc";
inputStr[2][1] = "ccc";
inputStr[2][2] = "3333";
fillYears(inputStr,3,str);
}
void fillYears(char*mat[][M],int rowsNum,char str[MAX_INPUT]){
char*token,*token2;
字符tmpStr[最大输入];
int i,指数=0;
字符subStr[2]=“\n”;
strcpy(tmpStr,str);
/*获取第一个令牌*/
令牌=strtok(tmpStr,subStr);
索引+=strlen(令牌)+1;
/*浏览其他代币*/
while(令牌!=NULL)
{
令牌2=strtok(令牌“”);
//遍历矩阵
对于(i=0;i更好的方法可能是使用正则表达式。除此之外,您还必须进行代码检查。strtok
是危险的,最好使用strep
例如…”我得到了错误。“什么错误?@0andriy感谢您的帮助advice@RadLexus抱歉,错误是:0x5b37d540处未处理的异常(msvcr100d.dll)在abc.exe中:0xC0000005:访问冲突读取位置0x00000000。对“strtok”的第二次和后续调用(例如在while循环底部调用时)应将NULL作为第一个参数传递-即strtok(NULL,substr)-不要忘了它可以返回NULL,因此您不想对其调用strlen!(事实上,这也可能是您的访问违规的原因)