当前位置: 首页 > 知识库问答 >
问题:

为什么它给了我一个额外的词?

蔚楷
2023-03-14

编写并测试您自己的函数char*funct(char*str,int x),反转字符串str(位置n的字符除外),并返回修改后的str作为结果。函数funct的用途可以是:

这是主要的:

  #include <iostream>
  #include <cstring>
  using namespace std;
  char* funct(char *str, int x);
  int main() {

  char str1 [] = "Hello cpp";

  cout << str1 << endl; // Hello cpp

  cout << funct (str, 1) << endl; // pepC ollH // the character at position 1 ('e') stays in place
  return 0;
  }
char* funct(char *str, int x) {

int counter = 0;
do {
    counter++;
    str++;
} while (*str);
str--;
char *wskTmp = str;
for (int i = 0; i < counter ; i++) {

    *wskTmp = *str;
    str--;
    wskTmp++;
}
*wskTmp = '\0';
wskTmp = wskTmp - counter;

for (int i = 0; i < counter - x -1; i++) {
    wskTmp++;
}
char tmp;
for (int i = 0; i < counter-3; i++) {
    tmp = *(wskTmp - 1);
    *(wskTmp - 1) = *wskTmp;
    *wskTmp = tmp;
    wskTmp--;
}

return str;
}

你好CppepC ollH

应该是:

你好Cpp

共有1个答案

贝浩歌
2023-03-14

您的代码非常混乱,而且是完成这项任务的一种非常迂回的方式,所以我对它进行了一些重组:

#include <cstring>
#include <iostream>
using namespace std;
char *funct(char *str, int x) {
    // keep track of the original start
    char *origStr = str;
    // iterate through the string to find the end
    do {
        str++;
    } while (*str);
    // decrease the string so it's on the last byte, not the nullbyte
    str--;
    // create a start and end
    char *start = origStr;
    char *end = str;
    if (start - origStr == x) {
        start ++;
    }
    if (end - origStr == x) {
        end--;
    }
    // if start >= end then we've finished
    while (start < end) {
        // swap values at start and end
        char temp = *start;
        *start = *end;
        *end = temp;
        // move the pointers closer to each other
        start++;
        end--;
        // skip the index x
        if (start - origStr == x) {
            start++;
        }
        // skip the index x
        if (end - origStr == x) {
            end--;
        }
    }
    // make sure to return the actual start
    return origStr;
}
int main() {
    char str1[] = "Hello cpp";

    cout << str1 << endl;  // Hello cpp

    cout << funct(str1, 1) << endl;  // pepC ollH // the character at position 1
                                     // ('e') stays in place
    return 0;
}
 类似资料:
  • 在这里,我使用了一个点切割注释,如下所示: 它给了我一个例外,那就是: 我刚刚开始学习AOP。任何建议或帮助都会有很大帮助。谢谢。

  • 我正在检查Angular Bootstrap UI,特别是服务并注意到一件有趣的事情。 在他们的示例中,'http://plnkr.co/edit/e5xykpqwytsljua6fxwt?p=preview',在附加到弹出窗口的控制器中,他们将选定的项包含到另一个内部属性中 为什么需要这个?JavaScript找到了什么? THX

  • 抱歉,如果不允许这样做。这是我第一次问问题。无论如何,我应该实现一个程序,根据文本读取等级。 “实施一个程序,根据以下内容计算理解某些文本所需的大致年级水平。文本:恭喜!今天是你的一天。你要去很棒的地方!你走了,走了!3 年级 在完成代码之后。每次我编译它时,它都会给我一个异常,即我除以零。几乎就像在我要求用户输入文本后,它根本不被读取,字母计数保持在零。我不知道如何绕过它。下面是我导入java.

  • 问题是 有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。 字符串=[ab,ab,abc]查询=[ab,abc,bc]有ab的实例2,'abc'的实例1和'bc'的实例0。对于每个查询,添加一个元素。 现在我尝试使用链表实现它,但不是以2,1,0的形式获得输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道是如何为超过3个链接创建LL的。请帮

  • 问题内容: 我有这个web.xml 突出显示,IDE给出的错误是:“发现无效的内容,从element开始… 我还需要做什么? 问题答案: 使用以下表示法: 但我建议阅读此链接。本教程将使您了解在JSP 2.0的情况下如何避免在web.xml中声明标签库。

  • MongoDB shell v3.4.1连接到:MongoDB://127.0.0.1:27017 2017-12-06T12:16:58.540+0530 W网络[main]连接到127.0.0.1:27017失败,在(轮询后检查套接字错误),原因:连接拒绝2017-12-06T12:16:58.540+0530 E查询[main]错误:无法连接到服务器127.0.0.1:27017,连接尝试失