所以我在做一个问题,我必须加入两个零终止字符串,第一个包含一个字,第二个是空的,是原始数组的两倍。我能够使用以下代码
来实现这一点#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char str1[] = "test";
char str2[(sizeof(str1)-1)*2];
char *p;
int count = 0;
for(p = str1; *p != 0; p++) {
str2[count] = *p;
count++;
}
cout << str2;
}
但是我必须使用具有以下原型的函数
char *combine(char *a);
所以我试过这个
#include <stdio.h>
#include <iostream>
using namespace std;
char *copy_and_reverse(char *a) {
char str2[8];
int count = 0;
char* b = str2;
for(a; *a != 0; a++) {
str2[count] = *a;
count++;
}
return b;
}
int main()
{
char str1[] = "test";
char *a;
a = str1;
char* b = copy_and_reverse(a);
for(b; *b != 0; b++) {
cout << *b;
}
}
但它不起作用(它正在打印字符串,但是它后面会打印几个随机字符),我对指针感到困惑,任何人都可以帮我解决这个问题吗? / p>
编辑:这是我要回答的问题
在C ++中编写一个函数,该函数采用
char *
样式的零终止字符串,并返回两倍于输入长度的char*
字符串。返回字符串的前半部分应包含原始数组内容的副本。字符串的后半部分应该以相反的顺序包含原始字符串的内容。该函数应具有以下原型:
char *copy_and_reverse(char* a);
注意:您不应使用任何库函数(例如来自
string.h
)。
答案 0 :(得分:1)
您的copy_and_reverse
代码存在两个大问题。
复制输入字符串后,您没有终止结果。这意味着str2
不是有效的字符串。修正:
str2[count] = '\0'; // after the loop
copy_and_reverse
返回指向局部变量(str2
)的指针。函数返回后,其所有局部变量都消失了,main
正在处理无效指针。要解决此问题,请使用静态内存(例如,将str2
声明为static
或将其设为全局变量)或动态内存(使用new[]
(或malloc()
)分配存储空间)。这两种方法都有其缺点。
小东西:
variable;
不执行任何操作(请参阅for (a; ...)
,for (b; ...)
)。str2
对于最终结果来说还不够大。 str1
长度为5个字节('t', 'e', 's', 't', '\0'
),因此char str2[8]
现在已足够,但最终您要为结果分配length * 2 + 1
个字节。答案 1 :(得分:-1)
我相信这会满足您的需求:
library(shiny)
library(plotly)
library(data.table)
library(GGally)
library(reshape2)
library(hexbin)
ui <- fluidPage(
plotlyOutput("plot"),
verbatimTextOutput("click")
)
server <- function(input, output, session) {
# Curve number to ID
cnToID <- function(h){
df <- data.frame(table(h@cID))
colnames(df) <- c("ID","count")
cnID <- df[order(df$count,as.character(df$ID)),]
cnID$curveNumber <- seq(0, nrow(cnID)-1)
return(cnID)
}
# Create data
set.seed(1)
bindata <- data.frame(x=rnorm(100), y=rnorm(100))
h <- hexbin (bindata, xbins = 5, IDs = TRUE, xbnds = range (bindata$x), ybnds = range (bindata$y))
hexdf <- data.frame (hcell2xy (h), ID = h@cell, counts = h@count)
p <- ggplot(hexdf, aes(x=x, y=y, fill = counts, ID=ID)) + geom_hex(stat="identity")
#p <- ggplot(hexdf, aes(x=x, y=y, fill = counts), ID=ID) + geom_hex(stat="identity")
cnID <- cnToID(h)
output$plot <- renderPlotly({
p2 <- ggplotly(p)
for (i in 1:nrow(hexdf)){
p2$x$data[[i]]$text <- gsub("<.*$", "", p2$x$data[[i]]$text)
}
p2
})
d <- reactive(event_data("plotly_click"))
output$click <- renderPrint({
if (is.null(d())){
"Click on a state to view event data"
}
else{
clickID <- as.numeric(as.character(cnID[which(cnID$curveNumber==d()$curveNumber),]$ID))
clickID
bindata[which(h@cID==clickID),]
}
})
}
shinyApp(ui, server)