Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中解析字符串_C_String_Parsing - Fatal编程技术网

在C语言中解析字符串

在C语言中解析字符串,c,string,parsing,C,String,Parsing,我想解析一个字符串,并对该字符串的最后一个字符进行一些检查。例如: char *name = "angela"; int i; for(i = 0; i <= strlen(name); i++) { if(name[i] == 'a' && i == strlen(name)) { *do something here*; } } char*name=“angela”; int i; 对于(i=0;i变化: for(i = 0; i

我想解析一个字符串,并对该字符串的最后一个字符进行一些检查。例如:

char *name = "angela";

int i;
for(i = 0; i <= strlen(name); i++) {
    if(name[i] == 'a' && i == strlen(name)) {
        *do something here*;
     }
}
char*name=“angela”;
int i;
对于(i=0;i变化:

for(i = 0; i <= strlen(name); i++) {
    if(name[i] == 'a' && i == strlen(name)) {

for(i=0;i函数strlen返回字符串的实际长度,而不是最后一个索引。
在您的示例“angela”中,strlen将返回6,但此字符数组的最后一个索引是5。因此您必须使用:

if(name[i] == 'a' && i == strlen(name) -1)

您可以像这样检查字符串的最后一个字符(无需使用循环):


与您的问题无关,但您应该在循环外部调用
strlen()
,并将其值存储在一个变量中。每次调用时,它都会迭代整个字符串。存储strlen()的值,而不是每次迭代都处理它。@FredLarson明白了!谢谢。因为名称不是易变的(并且在循环中不会被修改),很可能所有的调用都被优化为一个调用。@BrianKnoblauch:也许吧。我不知道优化器在确定循环不变量方面有多好。还有一个关于
for
for(I=0;I
if(name[i] == 'a' && i == strlen(name) -1)
char *name = "angela";
if(strlen(name)>0)//do the check below only if the string is not empty
if(name[strlen(name)-1]=='a')
{
    //do something here
}