You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串差异对比程序开发求助:测试用例与字符标记问题

Fixing Your String Difference Comparison Program

First, let's recap the requirements to make sure we're aligned:

  • Read an integer n (1 ≤ n ≤ 500) as the number of test cases
  • For each test case, take two equal-length strings (1-50 characters, letters/digits only)
  • Output each pair of strings on separate lines, followed by a marker line where:
    • . indicates a matching character at that position
    • * indicates a differing character at that position

Issues in Your Current Code

  1. Hardcoded Test Cases: You've manually defined specific strings instead of reading input dynamically based on the test case count n
  2. Incorrect Difference Logic: Using string.Except() compares the set of characters in each string, not the position-by-position characters. This means you'll replace all instances of a character that exists in one string but not the other, regardless of its position—this isn't what we need for position-based diff marking.

Solution Code

Here's a corrected implementation that addresses both problems:

using System;

public class Program
{
    public static void Main()
    {
        // Read the number of test cases
        if (!int.TryParse(Console.ReadLine(), out int testCaseCount))
        {
            Console.WriteLine("Invalid input for test case count");
            return;
        }

        // Process each test case
        for (int i = 0; i < testCaseCount; i++)
        {
            // Read the two strings for the current test case
            string str1 = Console.ReadLine().Trim();
            string str2 = Console.ReadLine().Trim();

            // Generate the marker line (since input strings are equal-length per requirements)
            char[] markers = new char[str1.Length];
            for (int j = 0; j < str1.Length; j++)
            {
                markers[j] = str1[j] == str2[j] ? '.' : '*';
            }
            string markerLine = new string(markers);

            // Output the result for this test case
            Console.WriteLine(str1);
            Console.WriteLine(str2);
            Console.WriteLine(markerLine);
            
            // Add a blank line between test cases (matches your original output style)
            if (i != testCaseCount - 1)
            {
                Console.WriteLine();
            }
        }
    }
}

Key Explanations

  • Test Case Handling: We first read n and loop exactly n times, reading two strings per iteration. Using int.TryParse adds a small guard against invalid input.
  • Position-Based Diff: Instead of using set operations, we loop through each character index directly. For each position, we check if the characters from both strings match, then assign . or * accordingly. This ensures we're marking differences at the exact position they occur.
  • Clean Output: We add a blank line between test cases (except after the last one) to match the formatting you had in your original code.

Example Input/Output

If you input:

2
abcdefg
acceeff
hbcdfgi
hbadehi

The output will be:

abcdefg
acceeff
.*.*.*.

hbcdfgi
hbadehi
..*.*..

This fixes both your original issues: it handles any number of test cases as specified, and generates the correct marker line for each pair of strings.

内容的提问来源于stack exchange,提问作者toto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:09:06