Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 - Fatal编程技术网

C字符串/字符数组

C字符串/字符数组,c,C,我希望我能解决这个问题。我正在尝试编写一个与sed命令相同的程序。我的问题在我编写的isMatch函数中。有些东西要么不对,要么不见了。代码的工作方式是用户以/sed aaa bb的形式执行程序,第二个argaaa用作在用户输入的字符串中查找的字符串,第三个argbb作为其替换。当它现在工作时,该程序只是回显用户输入,没有任何更改。我试图让它工作的方法是通过构建一个具有正确输出的新字符串 例如,用户输入/sed aaa bb“Enter”然后提示输入类似aaaabc的字符串,其中打印出的字符串为

我希望我能解决这个问题。我正在尝试编写一个与sed命令相同的程序。我的问题在我编写的isMatch函数中。有些东西要么不对,要么不见了。代码的工作方式是用户以/sed aaa bb的形式执行程序,第二个argaaa用作在用户输入的字符串中查找的字符串,第三个argbb作为其替换。当它现在工作时,该程序只是回显用户输入,没有任何更改。我试图让它工作的方法是通过构建一个具有正确输出的新字符串

例如,用户输入/sed aaa bb“Enter”然后提示输入类似aaaabc的字符串,其中打印出的字符串为bbabc

isMatch函数应该将inputString中的元素逐个与oldString进行比较,并返回0/1,这将告诉main方法按原样打印inputString字符,或者打印替换字符

我的代码:

#include <stdio.h>
#include <string.h>

int isMatch(char * oldS, char * inS){
    int i;                                                                                                                  
    for(i=0;i<strlen(inS);i++){
            if(inS == &oldS[i])
                    return 0;
            else
                    return 1;                                                                                                                                                                                                                       
  }
}                                                                                                                                                                                                                                               

int main (int argc, char *argv[]) {                                                                                             
         int i;                                                                                                                  
         int match;                                                                                                              
         char c;                                                                                                                 
         char input[100];
                                                                                                                            
         while(1){
            printf("Enter the string to be changed: ");

            if(scanf("%c",&c) == EOF){
                    break;
            }

            if( (input[0] = c) != '\n'){
                    for(i=1;i<100;i++){
                    scanf("%c",&input[i]);
                            if(input[i] == '\n' ){
                                    break;
                            }
                    }
            }

            for(i=0;i<100;i++){
                    match = isMatch(argv[1],&input[i]);
                    if(match != 0){
                            printf("%c",input[i]);
                            if(input[i] == '\n' ){
                                    break;
                            }
                    }
                    if(match = 0){
                            printf("%s",argv[2]);
                    }
            }

    }
 }
#包括
#包括
int isMatch(字符*旧,字符*inS){
int i;

对于(i=0;代码有几个问题:在
isMatch
中,您正在进行指针比较,这总是错误的,因为`oldS`和
inS
将指向不同的内存位置。此外,
isMatch
中的循环总是只执行一次迭代,因为
if
else
案例都执行
 return
。此外,函数末尾缺少一个
return
(您应该在编译时启用最大编译器警告以捕获此类问题)。在
main
函数中,有一个
if(match=0)
,它做赋值而不是比较,用
==
来代替。即使这些问题已经解决,我也不清楚代码应该如何解决问题。我不认为可以通过更改一两行来解决问题。但我也不认为如果有人仅仅用完全重写的代码来回答问题会对你有帮助您的代码。我认为如果您可以在代码中添加一些注释,为每个部分描述您打算执行的操作,将更有效率。这将使您更容易解释您的意图与代码所做操作的不同之处。