好吧所以我正在尝试编写一个函数来检查字符串数组中是否存在单词的字母(对于单词中的每个字母都会这样做)。经过一段时间的修补后,我想它在尝试使用strcmp()时崩溃了。因为我刚开始学习C所以我不知道自己做错了什么,所以任何帮助都会受到赞赏。这是功能:
char SingleChar(char *lex, int wordnum,char *word){
int i,j,k;
for(i=0;i<strlen(word);i++){
for(j=0;j<wordnum;j++){
for(k=0;k<strlen(lex[j]);k++){
if(strcmp(word[i],lex[k])){
return word[i];
}
}
}
}
return 0;
}
答案 0 :(得分:1)
您对char *
的含义存在误解。它是一个指向角色的指针。在C字符串中只是一个指向字符的指针,由其他字符和空终止符流动。在您的情况下,这意味着lex
是单个字符串,而不是字符串列表。
即
char *a = "imastring";
表示a是包含字符[i] [m] [a] [s] [t] [r] [i] [n] [g]的连续内存块的地址[\ 0]。在C中,null终止符用于表示字符串的结尾。
这意味着当你打电话给strlen(lex[j])
时,你只是在lex中引用一个字符,然后读到字符串的末尾,这样你的结果就会单调减少。
你可能想做的是使用双指针。 char ** list
将指向一个地址,该地址指向引用连续字符块的地址。
char ** list = (char **)malloc(sizeof(char *) * 5);
将为您分配5个顺序内存地址,然后可以指向字符串本身。您可以按如下方式为它们分配值。
list[0] = a
我希望这会有所帮助。
答案 1 :(得分:0)
在C中没有真正的字符串类型。 C中的字符串只是一个字符数组。 字符串数组是指向内存中字符数组的指针数组。
如果要检查“字符串”数组中的字母。 您可能需要一个指针,该指针在数组的每个字母中移动并比较每个字符。
strcmp()函数将返回true(1)或false(0),具体取决于字符串是否相等。
所以我想你想要的是你的程序将你的单词的字符与字符串数组中的每个单词进行比较。
这个程序会遍历整个单词然后告诉你这封信是否存在。 对于您输入的任何单词的每个字母。
-
#include <stdio.h>
#include <string.h>
/*
Function to check for a letter of a word
in an array of strings */
void singleChar(char *word,int arrlength, char *strings[])
{
int length = 0;
length = strlen(word); /* Calculates the length of the string */
for(int y = 0; y < arrlength ; y++) /*Increments to the next word in the array */
{
for(int i=0; i <= length ; i++) /*increments to the next letter of the word you want to check */
{
for(int x=0; x < strlen(strings[y]) ; x++) /*Increments x based on the length of the string */
{
char *p = strings[y];
if(word[i] == p[x]) /*Compares the the first letter of both strings */
{
printf("The letter %c exists.\n", word[i]);
}
}
}
}
}
int main ( void )
{
/*Example */
char *p = "Hello";
char *a[2];
a[0]="Hello";
singleChar(p, 1,a);
}
答案 2 :(得分:0)
不要真正看到一个字符串数组......你的C文件应该大致如下:
#include <stdio.h>
char SingleChar(char *lex, int wordnum, char *word){"your function in here"};
int main(){
// Declare your variables here
// Call your function here SingleChar(params)
return 0;
}
比较字符:
if(word[i]==lex[k]){
return word[i];
break;
}
不太确定你正在尝试使用除此之外的功能。你需要更具体,我没有看到你输入的字符串数组。