w0h0y0h 2023-05-10 15:50 采纳率: 100%
浏览 170
已结题

字符与数组的运用,请大家帮助解决

这个用数组怎么编程?存在空格,还存在换行,怎么用scanf来输入呀?

img

  • 写回答

5条回答 默认 最新

  • 语言-逆行者 2023-05-10 15:52
    关注

    img

    【法一】

    1. #include <stdio.h>
    2. #include <string.h>
    3. // 加密单个单词的函数
    4. void encryptWord(char* word) {
    5. int i, len = strlen(word);
    6. char c;
    7. for (i = 0; i < len; i++) {
    8. c = word[i];
    9. // 如果当前字母在A到Z的范围内
    10. if (c >= 'A' && c <= 'Z') {
    11. if (c >= 'A' && c <= 'M') { // 如果当前字母是第一组字母中的字母
    12. c = 'N' + (c - 'A'); // 替换为对应的第二组字母中的字母
    13. } else if (c >= 'N' && c <= 'Z') { // 如果当前字母是第二组字母中的字母
    14. c = 'A' + (c - 'N'); // 替换为对应的第一组字母中的字母
    15. }
    16. }
    17. // 将替换后的字母存储回原来的单词数组中
    18. word[i] = c;
    19. }
    20. }
    21. int main() {
    22. char word[101]; // 定义一个能够存储100个字符加上一个结束符'\0'的数组
    23. while (scanf("%s", word) != EOF) { // 循环读入每个单词,直到结束符EOF
    24. encryptWord(word); // 调用函数加密该单词
    25. printf("%s\n", word); // 输出加密后的结果
    26. }
    27. return 0;
    28. }

    【法二】

    1. #include <stdio.h>
    2. #include <string.h>
    3. void encryptWord(char* word) {
    4. int i;
    5. int length = strlen(word);
    6. for (i = 0; i < length; i++) {
    7. if (word[i] >= 'A' && word[i] <= 'Z') {
    8. if (word[i] >= 'A' && word[i] <= 'M') {
    9. word[i] = 'N' + (word[i] - 'A');
    10. } else if (word[i] >= 'N' && word[i] <= 'Z') {
    11. word[i] = 'A' + (word[i] - 'N');
    12. }
    13. }
    14. }
    15. }
    16. int main() {
    17. char input[100];
    18. scanf("%[^\n]", input);
    19. char* word = strtok(input, " ");
    20. while (word != NULL) {
    21. encryptWord(word);
    22. printf("%s\n", word);
    23. word = strtok(NULL, " ");
    24. }
    25. return 0;
    26. }

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    w0h0y0h 2023-05-11 04:06

    输入有两行,你只解决了一行

    回复
    语言-逆行者 回复 w0h0y0h 2023-05-11 04:14

    如果想要输入两行再输出也行

    回复
    语言-逆行者 回复 w0h0y0h 2023-05-11 04:56

    img

    1. #include <stdio.h>
    2. #include <string.h>
    3. // 加密单个单词的函数
    4. void encryptWord(char* word) {
    5. int i, len = strlen(word);
    6. char c;
    7. for (i = 0; i < len; i++) {
    8. c = word[i];
    9. // 如果当前字母在A到Z的范围内
    10. if (c >= 'A' && c <= 'Z') {
    11. if (c >= 'A' && c <= 'M') { // 如果当前字母是第一组字母中的字母
    12. c = 'N' + (c - 'A'); // 替换为对应的第二组字母中的字母
    13. } else if (c >= 'N' && c <= 'Z') { // 如果当前字母是第二组字母中的字母
    14. c = 'A' + (c - 'N'); // 替换为对应的第一组字母中的字母
    15. }
    16. }
    17. // 将替换后的字母存储回原来的单词数组中
    18. word[i] = c;
    19. }
    20. }
    21. int main() {
    22. char sentence[201]; // 定义一个能够存储200个字符加上一个结束符'\0'的数组
    23. char sentence1[201];
    24. char sentence2[201];
    25. fgets(sentence, sizeof(sentence), stdin); // 读入第一行数据,fgets可以读入含空格的一整行
    26. sentence[strcspn(sentence, "\n")] = '\0'; // 将最后一个换行符换成结束符'\0'
    27. strcpy(sentence1, sentence); // 记录该行数据
    28. encryptWord(sentence); // 调用函数加密该行数据
    29. strcpy(sentence2, sentence); // 记录加密后的该行数据
    30. fgets(sentence, sizeof(sentence), stdin); // 读入第二行数据
    31. sentence[strcspn(sentence, "\n")] = '\0'; // 将最后一个换行符换成结束符'\0'
    32. encryptWord(sentence); // 调用函数加密该行数据
    33. // sentence2加密后的第一行数据
    34. // sentence加密后的第二行数据
    35. char* token;
    36. token = strtok(sentence2, " "); // 使用空格作为分隔符,获取第一个单词
    37. while (token != NULL) { // 如果仍然有单词,就继续输出
    38. printf("%s\n", token);
    39. token = strtok(NULL, " "); // 继续获取下一个单词
    40. }
    41. token = strtok(sentence, " "); // 使用空格作为分隔符,获取第一个单词
    42. while (token != NULL) { // 如果仍然有单词,就继续输出
    43. printf("%s\n", token);
    44. token = strtok(NULL, " "); // 继续获取下一个单词
    45. }
    46. return 0;
    47. }

    回复
    展开全部6条评论
查看更多回答(4条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月11日
  • 请采纳用户回复 5月10日
  • 创建了问题 5月10日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部