关于C语言双字符串组合问题

题目:输入两个字符串,删除字符串里非英文字符,组合为一个字符串,输出时先输入的字符串在前

img


为什么会这样呢,请各位解释并改正一下

首先,将字符数组str1、str2、str3的大小设置大一点;

然后,将第一个if里字母的范围从'A'到'B','a'到'b' 改为'A'到'Z','a'到'z';

最后,字符数组str3里字符的结尾加一个空字符'\0'。

修改如下:


#include <stdio.h>

int main(void){
    
    
    char str1[100],str2[100],str3[200] = {'\0'};
    int t=0,i=0;
    printf("请输入两个字符串:");
    gets(str1);
    gets(str2);
    
    //printf("str1=%s, str2=%s\n",str1,str2);
    char *ps=str1;
    while(*ps++!='\0'){
        if((*ps>='A'&&*ps<='Z') || (*ps>='a'&&*ps<='z')){
            str3[i]=*ps,i++;
        //    printf("str3[%d]=%c\n",i,str3[i-1]);
        }
        
        if(t!=1 && *ps=='\0'){
            ps=str2,t=1;
        }
    } 
    str3[i]='\0';
    
    puts(str3);
    
    return 0;
    
} 

img

这题不需要用指针做,用string做比较方便,代码一会发给你

这段代码,在while(){ ... } 后面加一句:srt3[i] = '\0'; 然后才 puts(str3);

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7522738
  • 除此之外, 这篇博客: C语言预处理详解中的 当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能出现危险,导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    //x + 1;//不带副作用
    //x++;//带有副作用
    #define MAX(a, b) ((a) > (b) ? (a) : (b))
    int main()
    {
    	int x = 5;
    	int y = 8;
    	int z = MAX(x++, y++);
    	printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么?
    	return 0;
    }
  • 您还可以看一下 陈槐老师的零基础新手入门软件测试必知必会课程中的 项目实战中系统编写测试用例有什么意义小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,需要将字符串中的非英文字符删除。删除非英文字符是为了满足题目要求只输出英文字符的需求。可以通过遍历字符串的每个字符,判断其ASCII码值是否在合法的英文字符范围内(65-90和97-122)。如果不在范围内,则将该字符删除。

    以下是一个C语言的代码示例,可以实现删除字符串中的非英文字符:

    #include <stdio.h>
    
    void deleteNonEnglish(char str[]) {
        int i, j;
    
        for (i = 0, j = 0; str[i] != '\0'; i++) {
            if ((str[i] >= 65 && str[i] <= 90) || (str[i] >= 97 && str[i] <= 122)) {
                str[j] = str[i];
                j++;
            }
        }
    
        str[j] = '\0';
    }
    
    int main() {
        char str[100];
        printf("请输入一个字符串:");
        gets(str);  // 输入第一个字符串
    
        deleteNonEnglish(str);  // 删除非英文字符
    
        printf("删除非英文字符后的字符串:%s\n", str);
    
        return 0;
    }
    

    请注意,这段代码只会删除非英文字符,其他字符(如数字、标点符号等)会保留。

    接下来是将两个字符串组合成一个新字符串,且先输出输入的第一个字符串。可以使用字符串的拼接操作来实现。

    以下是一个C语言的代码示例,可以将两个字符串组合成一个新字符串并输出:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char str1[100], str2[100], combinedStr[200];
    
        printf("请输入第一个字符串:");
        gets(str1);  // 输入第一个字符串
    
        printf("请输入第二个字符串:");
        gets(str2);  // 输入第二个字符串
    
        strcpy(combinedStr, str1);  // 先将第一个字符串拷贝到组合字符串中
        strcat(combinedStr, str2);  // 再将第二个字符串拼接到组合字符串后面
    
        printf("组合后的字符串:%s\n", combinedStr);
    
        return 0;
    }
    

    这段代码使用了strcpy函数和strcat函数,其中strcpy函数用于将第一个字符串拷贝到组合字符串中,strcat函数用于将第二个字符串拼接到组合字符串的末尾。

    综上所述,结合以上代码示例,可以解决问题并提供相应的解决方案。