#include <iostream> using namespace std; #include <cstring> void strmncpy(char *s, int m, int n, char *t); int main() { char s[128],t[128]; int m,n; cin>>s; // 输入源串 cin>>m>>n; // 输入m和n strmncpy(s, m, n, t); // 字符串复制 //cout << t <<endl; // 输出复制结果 return 0; } // 函数strmncpy:字符串的部分复制,将s指向字符串从第m个字符开始的n个字符复制的t中 // 参数:s-指向源字符串,t-指向目标字符串,m-起始位置,n-字符个数 // 返回值:无 void strmncpy(char *s, int m, int n, char *t) { // 请在此添加代码,实现函数strmncpy /********** Begin *********/ int a=strlen(s); for(int j=m ; j<m+n; j++) { if (m+n-1>a) { for(int c=m ; c<=a; c++) { cout<<s[a]; } } else if (m-1>a) { cout<<" "; break; } else { cout<<s[j]; } } /********** End **********/ }这段代码怎么修改
时间: 2024-01-17 21:20:03 浏览: 21
这段代码可以修改为:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
void strmncpy(char *s, int m, int n, char *t);
int main() {
char s[128], t[128];
int m, n;
cin >> s;
cin >> m >> n;
strmncpy(s, m, n, t);
cout << t << endl;
return 0;
}
void strmncpy(char *s, int m, int n, char *t) {
int len = strlen(s);
for (int i = 0; i < n && m + i < len; i++) {
t[i] = s[m + i];
}
t[n] = '\0';
}
```
主要修改如下:
1. 在 `main` 函数中,将 `strmncpy` 的执行结果输出到控制台上,方便查看结果。
2. 在 `strmncpy` 函数中,使用一个 `len` 变量来记录 `s` 字符串的长度,避免重复计算。
3. 在 `strmncpy` 函数中,使用一个循环来复制字符串的一部分,并且需要判断 `m + i` 是否越界。同时,在复制完成后,需要手动将字符串的结尾设置为 `\0`。
相关问题
下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a 到z与所对应的数字的对照表。 #include<iostream> #include<cstring> #include <iomanip> using namespace std; class Table { public: Table(int p) { i=p; } void ascii( ); protected : int i; }; void Tab
le::ascii( ) { cout<<left<<setw(10)<<"Character"<<setw(10)<<"ASCII"<<endl; for(i=0;i<=127;i++) { cout<<left<<setw(10)<<char(i)<<setw(10)<<dec<<i<<endl; } } int main( ) { Table obj(0); obj.ascii( ); return 0; }
修改后的程序如下:
#include<iostream>
#include<cstring>
#include <iomanip>
using namespace std;
class Table {
public:
Table(int p)
{
i=p;
}
void alphabets(); //修改函数名
protected :
int i;
};
void Table::alphabets() //修改函数定义
{
cout<<left<<setw(10)<<"Character"<<setw(10)<<"ASCII"<<endl;
for(i=97;i<=122;i++) //修改循环范围
{
cout<<left<<setw(10)<<char(i)<<setw(10)<<dec<<i<<endl;
}
}
int main( ) {
Table obj(0);
obj.alphabets(); //修改函数调用
return 0;
}
修改后的程序可以输出字母a 到z与所对应的数字的对照表。
将下面的c语言代码转化为java代码:#include <iostream> #include <cstring> #include<cmath> #include<stdio.h> #include<map> using namespace std; //词典结构 struct S { char des[15]; //目标语言 char src[15]; //英语 }dic[100010]; //定义比较器,目标语言字典序升序排列 int cmp(const void *a, const voi
Java代码如下:
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
//词典结构
static class S {
String des; //目标语言
String src; //英语
}
static S[] dic = new S[100010];
//定义比较器,目标语言字典序升序排列
static class MyComparator implements Comparator<S> {
public int compare(S s1, S s2) {
return s1.des.compareTo(s2.des);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, String> map = new HashMap<String, String>();
int cnt = 0;
while (scanner.hasNext()) {
String src = scanner.next();
String des = scanner.next();
dic[cnt] = new S();
dic[cnt].des = des;
dic[cnt].src = src;
cnt++;
}
scanner.close();
//按目标语言字典序升序排列
Arrays.sort(dic, 0, cnt, new MyComparator());
//构建映射表
for (int i = 0; i < cnt; i++) {
map.put(dic[i].des, dic[i].src);
}
//查询并输出翻译结果
while (scanner.hasNext()) {
String word = scanner.next();
if (map.containsKey(word)) {
System.out.println(map.get(word));
} else {
System.out.println("eh");
}
}
}
}